c++ - 将 int[][] 分配给 int**

标签 c++ c arrays pointers

<分区>

据我所知,在某些情况下,数组会转换为指向其第一个元素的指针:

int a[5];
int * p;

p = a;

按照这种方法并考虑到我可以将数组分配给指针,为什么我不能将二维数组分配给指向指针的指针?

int a[5][5];
int ** q;

q = a;

但是,我可以将指针数组分配给指向指针的指针:

int * p[5];
int ** q;

q = p;

如果将数组转换为指向其第一个元素的指针,则在第二个示例中发生 q = a 时,a 应该是指向 a[0] 的指针,而 a[0] 应该是指向 a[0] 的指针[0],对吧?

此外,如果我这样做,我不会收到错误:

cout << **a;

提前致谢,希望您能帮助我理解。

最佳答案

问题是数组 int a[5][5]; 存储了 25 个连续的 int

int **q; 这样的数组/指针的指针期望找到指向 int 的连续指针数组。

这就是为什么你想做的作业是不可能的。

关于c++ - 将 int[][] 分配给 int**,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25343928/

相关文章:

c - strcmp() 给出段错误 : 11 and pointer from integer warning

python - 从 Python 调用 C 函数

c - C 中的 %f 和 %F 有什么区别?

java - 当条件应该为 true 时,if-else 语句的计算结果不为 true

c# - 在 C# 中按字母顺序对数组进行排序

c++ - 什么时候我们需要显式实例化模板函数?

c++ - 如何使用 CMake 在 android 构建上编译和共享两个 c++ 库

c++ - 如何访问 3D CV::Mat 的索引

c++ - 如何强制链接器在本地解析弱符号?

c++ - 您如何将该C++程序转换为C程序?