指针和数组
为什么指针数组“等价”在以下情况下不起作用?
void foo(int** x) {
cout << x[0][1];
}
int main( ) {
int a[2][2] = {{1,2},{2,3}};
foo(a);
}
谢谢
why does the pointer array "equivalence" not work in the following case?
void foo(int** x) {
cout << x[0][1];
}
int main( ) {
int a[2][2] = {{1,2},{2,3}};
foo(a);
}
thank you
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
int** 和 int[2][2] 的内存模型不同。
int a[2][2]
在内存中存储为:int** x
:while
addr1
和addr2
只是内存中的地址。你只是无法将其中一种转换为另一种。
The memory model of int** and int[2][2] is different.
int a[2][2]
is stored in memory as:int** x
:while
addr1
andaddr2
are just addresses in memory.You just can't convert one to the other.
它不起作用,因为只有多维数组的第一层衰减为指针。试试这个:
It doesn't work because only the first level of the multidimensional array decays to a pointer. Try this:
因为类型不是int **。这对于 foo function
foo(int *[2]);
来说是正确的指针 a 的类型不是 int ** ,而是 int* [2] ..
because the type is not int **. this right for foo function
foo(int *[2]);
type of pointer a is not int ** , exactly int* [2]..