二维阵列的名称到底代表什么?

What does exactly name of 2D array represents?

本文关键字:什么 二维 阵列      更新时间:2023-10-16

类似一维数组的名称表示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的基址。arr[0]arr和地址是相同的。

同样,在2D数组的情况下,例如

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

arr表示数组名称,它表示arr的基址。

printf("%pn",(void*)arr);
printf("%pn",(void*)&arr[0]);
printf("%pn",(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(in hexa)

2D 数组是数组的数组,其工作方式与 1D 数组完全相同:

int a[10];
a == &a[0];
int* = &a[0];
int b[10][20];
b == &b[0];
int** = &b[0];

二维数组的名称等效于指向外部数组的第一个元素(即内部一维数组(的指针。