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

标签 c++ c arrays multidimensional-array variable-assignment

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/

相关文章:

找不到当前函数的边界

c - 多个 fork 语句

c - 在 C 中更新字符串

c# - int[,] 数组与 Dictionary<> 的效率比较,用于不断更新

android - 从 Qt quick control 2 加载下一个 Screen/ApplicationWindow

c++ - Intel 上的多线程比 AMD 慢得多

c++ - 高级和低级编程语言之间的关系

c - C 函数中的简单函数

javascript - 在对象数组中搜索对象

c++ - 用户空间缓冲区和内存映射文件之间的 DMA