二维数组的存储顺序、表示方法
- 二维数组的存储顺序、表示方法
先说一维数组:
1. 数组首地址 也是 第一个元素的首地址
1 #include <iostream>
2 using namespace std;
3
4 int main() {
5 int arr[5] = {};
6 cout << "arr = " << arr << endl;
7 cout << "&arr[0] = " << &arr[0] << endl;
8
9 return 0;
10 }
res:
可以看到 arr 和 &arr[0] 的内容一样。
2. 下一个元素的地址为 前一个元素的地址+元素类型大小
经试验,下一个元素的地址为 前一个元素的地址+1,编译器会自动推导元素类型大小
1 #include <iostream>
2 using namespace std;
3
4 int main() {
5 int arr[5] = {1,2,3,4,5};
6 cout << "&arr[0] = " << &arr[0] << endl; // 数组首地址; 第一个元素的地址
7 cout << "*(&arr[0]+4) = " << *(&arr[0] + 4) << endl; // 第五个元素的值
8 cout << "&arr[0]+4 = " << &arr[0] + 4 << endl; // 第五个元素的地址
9 cout << "&arr[1] = " << &arr[1] << endl; // 第二个元素的地址
10 cout << "*(&arr[0]+1) = " << *(&arr[0] + 1) << endl; // 第二个元素的值
11
12 return 0;
13 }
res:
二维数组:
存储顺序:
假设有一个二维数组定义如下:
int iArray[2][3]={};
那么它的存储结构如下:
二维数组按行顺序存储(先第1行,再第2行、第3行...)
再看一个示例:
1 #include <iostream>
2 using namespace std;
3
4 int main() {
5 int arr[2][3] = {
6 {1,2,3},
7 {4,5,6},
8 };
9 cout << "&arr[0][0] = " << &arr[0][0] << endl;
10 cout << "&arr[0] = " << &arr[0] << endl;
11 cout << "arr[0] = " << arr[0] << endl;
12 cout << "&arr[1][0] = " << &arr[1][0] << endl;
13 cout << "&arr[1] = " << &arr[1] << endl;
14 cout << "arr[1] = " << arr[1] << endl;
15
16 return 0;
17 }
res:
arr[0] == &arr[0] == &arr[0][0]
arr[1] == &arr[1] == &arr[1][0],依次类推...
arr[n] 或者 &arr[n] 就是 arr[n][0] 元素的地址
(〃>_<;〃)(〃>_<;〃)(〃>_<;〃)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 单元测试从入门到精通
· 上周热点回顾(3.3-3.9)
· winform 绘制太阳,地球,月球 运作规律