二维阵列的名称到底代表什么?
What does exactly name of 2D array represents?
类似一维数组的名称表示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+0
和a+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];
二维数组的名称等效于指向外部数组的第一个元素(即内部一维数组(的指针。
相关文章:
- 将二维矢量传递给类
- 将值从二维数组输出到文本文件
- 我在二维向量中是否正确分配了内存
- 带结构的二维矢量:如何存储元素
- 在二维数组中查找最小值和最大值?
- 移动二维数组中的字符
- 在创建动态二维数组时,在A[i*c+j]中使用c有什么用,即c代表什么
- 二维阵列的名称到底代表什么?
- 使用什么数据结构来存储基于游戏对象的二维单元地图?
- 在 c 和 c++ 中,二维数组的元素是什么类型?
- 存储二维数组指针的方法是什么
- 什么是快速矩阵或二维数组,用于在C++中存储邻接矩阵
- C++OpenCV:应用二维卷积的最简单方法是什么
- 当您有一个二维数组(C++)时调用析构函数的正确方法是什么?
- 关于C++中的二维数组,我的解决方案有什么问题
- 二维数组参数之间的区别是什么?
- 在内存中操作std::string的二维动态数组的最有效方法是什么?
- 在 c++ 中声明和初始化(大型)二维对象数组的正确方法是什么?
- 双指针和二维数组之间的关系是什么?
- 动态内存分配:当最右边的维度是可变的时,二维数组的替代方案是什么