gpt4 book ai didi

c++ - 二维数组的名称到底代表什么?

转载 作者:行者123 更新时间:2023-11-27 23:45:26 33 4
gpt4 key购买 nike

像一维数组的名字代表a[0]的地址,二维数组的名字代表什么?如果它也代表a[0][0]的地址,那为什么我使用这个时出错:

int a[2][2];
sort(a,a+4);

同时,

sort(&a[0][0] , &a[0][0]+4)

工作得很好。

最佳答案

1D 数组的情况下

int arr[5] = {1,2,3,4,5};

arr表示数组名,表示arr的基地址。而arrarr[0]的地址是一样的。

类似于 2D 数组的情况

int arr[2][2] = { {1,2},{3,4}};

arr表示数组名,表示arr的基地址。

printf("%p\n",(void*)arr);
printf("%p\n",(void*)&arr[0]);
printf("%p\n",(void*)&arr[0][0]);

最重要的是 printf() 结果相同。

注意:在下面的例子中

int a[2][2];
sort(a,a+4);

a+4 根本不存在,您只有 a+0a+1

a[0][0]     a[0][1]     a[1][0]     a[1][1]
|(0x100) |(0x104) |(0x108) |(0x10c)
------------- ------------
| |
a[0](0x100) a[1](0x108) or a+1 ... there is no a+4
| |
----------------------
|
a (0x100<- assume base address of 2D array a is ox100)

虽然&a[0][0]+4不同,但是是(0x100 + 4 * sizeof(a[0][0])0x110(十六进制)

关于c++ - 二维数组的名称到底代表什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51080764/

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