gpt4 book ai didi

c++ - C 将二维数组转换为双指针打印意外值

转载 作者:太空宇宙 更新时间:2023-11-04 05:13:21 25 4
gpt4 key购买 nike

为什么下面的程序打印的是 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;
}

最佳答案

数组的数组与指向指针的指针不同

原因是内存布局完全不同。

对于数组的数组:

+-----------+-----------+-----------+-----------+| arr[0][0] | arr[0][1] | arr[1][0] | arr[1][1] |+-----------+-----------+-----------+-----------+

For a pointer to pointer:

+--------+--------+-----+| arr[0] | arr[1] | ... |+--------+--------+-----+  |        |  |        V  |      +-----------+-----------+-----+  |      | arr[1][0] | arr[1][1] | ... |  |      +-----------+-----------+-----+  V+-----------+-----------+-----+| arr[0][0] | arr[0][1] | ... |+-----------+-----------+-----+

As arrays decays to pointer, you can have a pointer to arrays though:

int (*ptr)[2] = arr;

关于c++ - C 将二维数组转换为双指针打印意外值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21580782/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com