2 多维数组
2.1 多维数组介绍
下图是一个四行六列的二维数组示意图:
2.2 二维数组的定义
1.方式1: 先定义再初始化(最蠢的做法)
// 定义一个4行6列的二维数组
int a[4][6];
// 进行初始化赋值
a[0][0] = 10
a[0][1] = 20;
a[0][2] = 30;
a[0][3] = 40;
a[0][4] = 50;
a[0][5] = 60;
a[1][0] = 100;
a[1][1] = 200;
……
2. 方式2: 直接定义并初始化
// 定义一个4行6列的二维数组,以为矩阵的形式初始化
int a[4][6] = {
{10, 20, 30, 30, 40, 60},
{100, 200, 300, 400, 500, 600},
{1000, 2000, 3000, 4000, 5000, 6000},
{10000, 20000, 30000, 40000, 50000, 60000}
};
// 定义一个4行6列的二维数组, 会自动匹配到各行各列
int b[4][6] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24};
// 如果所赋值的数量可以与元素数量对应,第一维的数组长度可以不给出
int b[][6] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24};
1. 初始化可以不写行但是一定要写列
2. 如果对全部元素都赋初值(即提供全部初始数据),则定义数组时对第一维的长度可以不指定,但第二维的长度不能省。例如
int a[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};
与下面定义等价:
int a[][4]={1,2,3,4,5,6,7,8,9,10,11,12};
2.3 二维数组的访问和遍历
访问二维数组的元素,需要使用两个下标(索引),一个用于访问行(第一维),另一个用于访问列(第二维),我们通常称为行下标(行索引)或列下标(列索引)。遍历二维数组,需要使用双层循环结构
代码示例:
#include <stdio.h>
int main()
{
// 定义一个 3 行 4 列的数组
int map[3][4] = {
{1, 2, 3, 4},
{11, 12, 13, 14},
{21, 22, 23, 24}};
// 计算第一维度的长度
int rows = sizeof(map) / sizeof(map[0]);
// 计算第二维度的长度
int cols = sizeof(map[0]) / sizeof(int);
// 遍历输出每个元素
for (int i = 0; i < rows; i++)
{
for (int j = 0; j < cols; j++)
{
printf("%d\t", map[i][j]); // \t 可以输出得更加整齐
}
printf("\n");
}
// 计算所有元素的和
int sum = 0;
for (int i = 0; i < rows; i++)
{
for (int j = 0; j < cols; j++)
{
sum += map[i][j];
}
}
printf("所有元素的和:%d", sum); // 所有元素