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]..
精彩评论