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

标签 c++ arrays multidimensional-array

像一维数组的名字代表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/

相关文章:

c++ - 静态多态性中的歧义

c++ - CLion:无法解析 <member_variable_name>

python - 比较数组时,为什么 "in1d"比 "a==b"慢得多

python - 3D 阵列的 1D 绘图

java:将值应用于列、3d 数组

c++ - 互斥体的存在是否有助于摆脱 volatile 关键字?

c++ - 在 C/C++ 中创建和发送数据包

PHP - 从 MySQL 表中获取大数组的有限 block

arrays - 插入深层嵌套数组

php - 比较两个数组的两个值