指针和数组

pointers and arrays

本文关键字:数组 指针      更新时间:2023-10-16

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

void foo(int** x) {
  cout << x[0][1];
}
int main( ) {
  int a[2][2] = {{1,2},{2,3}};
  foo(a);  
}

谢谢

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]

addr1addr2只是内存中的地址。
您只是无法将一个转换为另一个。

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

#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);
}

因为类型不是 int **。

foo(int *[2]);

指针 A 的类型不是 int **,确切地说是 int* [2]。