int matrix[9][9],*p;
p=matrix[0];
这有效并给出了第一行matrix
,但是如何获得matrix
的第一列我试过p=matrix[][0];
?我也不明白为什么下面的代码会出现编译错误?
int matrix[9][9],p[9]; // it looks really ugly, byt why it doesn't work ?
p=matrix[0]; // compiler gives "invalid array assigment"
是不是因为多维数组是数组的数组 - 我们应该将 matrix[i][j]
解释为第 i 个嵌套数组的第 j 个元素?
最佳答案
在C/C++中,多维数组实际上是作为一维数组(在内存中)存储的。您的二维矩阵存储为行优先排序的一维数组。这就是为什么从中取出一列并不容易,而且默认情况下不提供。 内存中没有连续的数组,您可以获得一个指针指向它代表多维数组的列。见下文:
当您执行 p=matrix[0]
时,您只是获得指向第一个元素 matrix[0][0]
的指针,这让您认为你得到了指向第一行的指针。实际上,它是指向包含matrix
的整个连续数组的指针,如下所示:
matrix[0][0]
matrix[0][1]
matrix[0][2]
.
.
matrix[1][0]
matrix[1][1]
matrix[1][2]
.
.
matrix[8][0]
matrix[8][1]
matrix[8][2]
.
.
matrix[8][8]
如上所示,任何给定列的元素都由相应行中的其他元素分隔。
因此,作为旁注,使用指针 p
,您可以根据需要遍历矩阵的全部 81 个元素。
关于c++ - 如何在 C/C++ 中获取多维数组的列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15258084/