如何在C/C++中获取多维数组的列?

Qbi*_*bik 3 c c++ arrays variable-assignment multidimensional-array

int matrix[9][9],*p;
p=matrix[0]; 
Run Code Online (Sandbox Code Playgroud)

这工作并给出了第一行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"
Run Code Online (Sandbox Code Playgroud)

是因为多维数组是数组的数组 - 我们应该解释matrix[i][j]为第i个嵌套数组的第j个元素?

mey*_*mer 15

在C/C++中,多维数组实际上存储为一维数组(在内存中).您的2D矩阵存储为具有行优先排序的一维数组.这就是为什么从列中删除它并不容易,并且默认情况下不提供.内存中没有连续的数组,您可以获得指向多维数组列的指针.见下文:

当你这样做时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]
Run Code Online (Sandbox Code Playgroud)

如上所示,任何给定列的元素由相应行中的其他元素分隔.

因此,作为旁注,使用指针p,如果您愿意,可以遍历矩阵的整个81个元素.


小智 8

您可以使用类似循环获取第一列

for(int i = 0; i < 9; i++)
{
    printf("Element %d: %d", i, matrix[i][0]);
}
Run Code Online (Sandbox Code Playgroud)

我认为分配不能正常工作,因为你试图为指针分配一些不是地址的东西.

(对不起,这是c代码)