2011-11-30 102 views
0

我目前使用下面的代码来获取元素的当前行和列在一个二维int数组的列:让行/动态二维数组元素

const int num_rows = 5; 
const int num_columns = 7; 

int a[num_rows][num_columns]; 

int *p = &a[2][4]; 

int row = (p - &a[0][0])/num_columns; 
int col = (p - &a[row][0]); 

也能正常工作,但现在我需要更改代码以将行数和列数作为参数。据我所知,这意味着我需要动态创建二维数组:

int** ary = new int*[sizeX]; 

for(int i = 0; i < sizeX; ++i) 
    ary[i] = new int[sizeY]; 

如果我创建二维数组这样,上面的代码,找到行/列休息。我能做什么?

回答

0
int *ary = new int [sizeX * sizeY]; // allocate memory for the 2d array 

for(int i = 0; i < sizeX; ++I) 
    for(j = 0; j < sizeY; ++j) 
      ary[i * sizeY + j] = 0; 

    // to get the value of collumn c and row r: use ary[c * sizeY + r]; 
+0

我认为我可以让它按照这种方式工作。这是一个更多的簿记,因为它确实是一维阵列,但我想这是我的情况的最佳选择。 – user987280

0
int row = (p - &a[0][0])/num_columns; 
int col = (p - &a[row][0]); 

这是远离指针运算方式一个非常好的主意。不要这样做!你基本上是减去指针并用num_columns除数,那个数字是随机的。

如果您想要获取元素的行/列,请一次在数组中搜索一个元素。

for(int row=0; row<num_rows; ++row) { 
    for(int column=0; column<num_columns; ++column) { 
     if (a[row][column] == element) { 
     // we got it! 
     } 
    } 
} 
+0

OP希望从指针'p'获得'row''列,所以也许它应该是'if(a [row] + column == p)' – fefe

+0

OP想要2d数组变量的维数。这只适用于'a'具有静态维度。 –

+0

为什么这个数字是随机的?指针之间的差异将给出所述指针之间的元素数量,并除以列中元素的数量将给出当前行,因为整数除法将余数截断。我误解了你的意思吗? – user987280