Din*_*esh 0 c c++ arrays pointers
以下程序是打印9而不是17为什么?
int main()
{
int **ptr;
int i=0, j=0;
int arr[2][2]={{17,9},{7,19}};
ptr=(int**)arr;
printf("%d\n", ptr[0]);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
数组的数组是不一样的指针的指针.
原因是内存布局完全不同.
对于数组数组:
+-----------+-----------+-----------+-----------+ | arr[0][0] | arr[0][1] | arr[1][0] | arr[1][1] | +-----------+-----------+-----------+-----------+
对于指向指针的指针:
+--------+--------+-----+ | arr[0] | arr[1] | ... | +--------+--------+-----+ | | | V | +-----------+-----------+-----+ | | arr[1][0] | arr[1][1] | ... | | +-----------+-----------+-----+ V +-----------+-----------+-----+ | arr[0][0] | arr[0][1] | ... | +-----------+-----------+-----+
当数组衰减为指针时,您可以使用指向数组的指针:
int (*ptr)[2] = arr;
Run Code Online (Sandbox Code Playgroud)