获取动态二维数组元素的行/列

Posted

技术标签:

【中文标题】获取动态二维数组元素的行/列【英文标题】:getting row/column of dynamic 2d array element 【发布时间】:2011-11-30 02:59:34 【问题描述】:

我目前正在使用以下代码来获取 2D 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]; 

如果我以这种方式创建 2D 数组,上面的代码会找到行/列中断。我能做什么?

【问题讨论】:

【参考方案1】:
 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];

【讨论】:

我想我可以让它这样工作。由于它实际上是一维数组,因此需要更多记账,但我想这是适合我情况的最佳选择。【参考方案2】:
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!
      
   

【讨论】:

OP 想从指针 p 中获取 row column,所以也许应该是 if (a[row]+column == p) OP 想要二维数组变量的维度。这仅在“a”具有静态维度时才有效。 为什么这个数字是随机的?指针之间的差异将给出所述指针之间的元素数,并且除以一列中的元素数将给出当前行,因为整数除法会截断余数。我误会你的意思了吗? 当你做多个'new'时,分配给每个new的内存不能保证是连续的。在那里循环之后,ary[1] - ary[0] 将不会返回 sizeY。那么,您是要获取元素的行/列还是二维数组变量的维度?

以上是关于获取动态二维数组元素的行/列的主要内容,如果未能解决你的问题,请参考以下文章

Java 数组 获取二维数组的行数和列数

二维数组a[11][11]数组元素个数

java中怎么对二维数组的列排序?

关于vector创建的二维数组

二维数组的 每行的元素个数必须一样吗?

c语言中怎样实现对二维数组元素进行赋值并输出。