二维数组的存储顺序、表示方法

发布时间 2023-09-14 19:02:06作者: 我会变强的
  • 二维数组的存储顺序、表示方法

先说一维数组:

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] 元素的地址

(〃>_<;〃)(〃>_<;〃)(〃>_<;〃)