据我所知,在某些上下文中,数组被转换为指向其第一个元素的指针:
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的指针,a应该是指向a的指针,对吧?
此外,如果我这样做,我不会得到错误:
cout << **a;提前谢谢你,希望你能帮我理解。
发布于 2014-08-17 05:04:12
问题是一个数组int a[5][5];存储了25个连续的int。
像int **q;这样指向数组/指针的指针期望找到指向int的连续指针数组。
这就是为什么你想要做的任务是不可能的。
发布于 2014-08-17 05:05:11
可以将多维数组分配给单个指针
int a[5][5];
int *p = a;因为存储器被分配为按行组织的单个块。
a = a11 a12 a13
a21 a22 a23
a = a11 a12 a13 a21 a22 a23 发布于 2014-08-17 05:16:23
对于多维数组,如果要指向单个(标量)值,则应使用以下声明:
int a[5][5];
int (*q)[5]; /* pointer to five-element array of basic type int */
q = a;
q[0][0]; /* equivalent to a[0][0] */其中5是“列”大小(紧挨着最左边的“行”大小)。一般来说,对于更多维度,请记住规则是,只有最左边的大小被替换为声明器的(*q)部分。
事实上,当你编写函数时,它有多维数组参数,那么对于编译器来说,它被认为是上面形式的,例如:
int foo(int a[5][5]) { ... }被有效地替换为:
int foo(int (*a)[5]) { ... }https://stackoverflow.com/questions/25343928
复制相似问题