开发者

pointers and arrays

开发者 https://www.devze.com 2023-03-05 07:08 出处:网络
why does the pointer array \"equivalence\" not work in the following case? void foo(int** x) { cout <&开发者_运维百科lt; x[0][1];

why does the pointer array "equivalence" not work in the following case?

void foo(int** x) {
  cout <&开发者_运维百科lt; x[0][1];
}

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

thank you


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.


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


because the type is not int **. this right for foo function

foo(int *[2]);

type of pointer a is not int ** , exactly int* [2]..

0

精彩评论

暂无评论...
验证码 换一张
取 消