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代码)
| 归档时间: |
|
| 查看次数: |
34602 次 |
| 最近记录: |