指针和数组

发布于 2024-11-06 21:01:18 字数 173 浏览 1 评论 0原文

为什么指针数组“等价”在以下情况下不起作用?

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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

心凉怎暖 2024-11-13 21:01:18

int** 和 int[2][2] 的内存模型不同。
int a[2][2] 在内存中存储为:

&a     : a[0][0]
&a + 4 : a[0][1]
&a + 8 : a[1][0]
&a + 12: a[1][1]

int** x:

&x       : addr1
&x + 4   : addr2
addr1    : x[0][0]
addr1 + 4: x[0][1]
addr2    : x[1][0]
addr2 + 4: x[1][1]

while addr1addr2 只是内存中的地址。
你只是无法将其中一种转换为另一种。

The memory model of int** and int[2][2] is different.
int a[2][2] is stored in memory as:

&a     : a[0][0]
&a + 4 : a[0][1]
&a + 8 : a[1][0]
&a + 12: a[1][1]

int** x:

&x       : addr1
&x + 4   : addr2
addr1    : x[0][0]
addr1 + 4: x[0][1]
addr2    : x[1][0]
addr2 + 4: x[1][1]

while addr1 and addr2 are just addresses in memory.
You just can't convert one to the other.

夜司空 2024-11-13 21:01:18

它不起作用,因为只有多维数组的第一层衰减为指针。试试这个:

#include <iostream>
using std::cout;

void foo(int (*x)[2]) {
  cout << x[0][1];
}

int main( ) {
  int a[2][2] = {{1,2},{2,3}};
  foo(a);
}

It doesn't work because only the first level of the multidimensional array decays to a pointer. Try this:

#include <iostream>
using std::cout;

void foo(int (*x)[2]) {
  cout << x[0][1];
}

int main( ) {
  int a[2][2] = {{1,2},{2,3}};
  foo(a);
}
那片花海 2024-11-13 21:01:18

因为类型不是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]..

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文