#M8214. 多维数组
多维数组
当前没有测试数据。
多维数组的定义一般形式
数据类型 数组名[行长度][列长度];
声明与初始化
int arr[3][4] = {1,2,3,4};
int arr[3][4] = {{1,2},{4,5}}; // 其余未初始化的元素为0
int arr[][4] = {{2,3},{4,5}};
二维数组如果有初始化,行可以省略,列不能省略!!
我们可以把二维数组看成由多个一维数组组成的,只有在确定每个一维数组存放多少个元素才能确定二维数组。假设省略列,那么操作系统无法得知每个一维数组分配多少个元素,从而造成二维数组的混乱。
计算存储空间
占用空间 = 元素个数 * 一个元素所需内存大小。
类型名 | 存储空间 |
---|---|
char | 1 个字节 |
bool | 1 个字节 |
short | 2 个字节 |
float | 4 个字节 |
int | 4 个字节 |
long long | 8 个字节 |
double | 8 个字节 |
多维数组的使用
二维数组看似多行多列,实际上是连续存储的, 本质上还是多个一维数组,如果把二维数组的每一行看作一个一维数组,那么每一行的一维数组也有数组名,arr[0]就是第一行的数组名,arr[1]就是第二行的数组名,以此类推。所以二维数组也可以通过下标的方式来引用每个元素。
格式:数组名[行下标][列下标];
int arr[3][4] = {{1,2},{4,5}, {7, 8}};
for (int i = 0; i < 3; i++)
{
for (int j = 0; j < 4; j++)
{
cout << arr[i][j] << ' ';
}
}
下标
由于数组存储空间是连续的,那么下标也可以指距起始位置的偏移量。 数组元素的存储地址 = 数组空间首地址 + 偏移量 * 一个元素内存空间。
![](file://acKvNGni3xZqdirBLrVZ4.jpeg)
以行为主序的二维数组 (下标从 0 开始),求 对于前 行,共有 行,每行 个元素,一共有 个元素;对于第 行,之前有 个元素;故 的存储位置相对于数组空间首地址偏移量为 。
![](file://Xaj4tMg9yWaifK0qNY_7n.jpeg)
以行为主序的二维数组 (下标从 1 开始),求 对于前 行,共有 行,每行 个元素,一共有 个元素;对于第 行,之前有 个元素; 故 的存储位置相对于数组空间首地址偏移量为 。