C语言二维数组的定义和使用(新手必看)
读者应该掌握了 C 语言一维数组的用法,一维数组的索引只有一个,如果索引是两个呢?
在 C语言中,将索引是两个的数组称为二维数组,比如说 Array[m][n] 表示有 m 行 n 列的二维数组。
例如,下图所示的书柜索引示意图就是一个图形化的二维数组,它包含了每个书柜所在行、列的位置信息。

图 1 书柜索引示意图
例如,在图 1 中找到 4104 的位置,此时需要定义二维数组 iArray[3][3],先找第 1 维的第 4 行,再找第 2 维的第 4 列,就可以准确找到位置。
二维数组的声明与一维数组的类似,一般形式如下:
如果有二维数组 array[n][m],则二维数组索引的取值范围如下:
例如,定义一个 3 行 5 列的整型数组,代码如下:
在 C语言中,对二维数组的初始化可以用以下几种方法实现。
1) 可以将所有数据写在一个花括号内,按照数组元素排列顺序对元素赋值,例如:
2) 在为所有元素赋初值时,可以省略行索引(不能省略列索引),例如:
上述代码表示的二维数组形式如下:
3) 也可以通过分行给数组元素赋值,例如:
4) 在分行赋值时,只对部分元素赋值,未被赋值的元素系统默认设置值为 0,例如:
5) 直接对数组元素赋值,例如:
例如:
这段代码表示的二维数组形式如下:
注意,不管是行下标还是列下标,都是从 0 开始的。这里要注意索引越界的问题,例如:
【实例】用二维数组求下表中各科的平均成绩。
具体代码如下:
在 C语言中,将索引是两个的数组称为二维数组,比如说 Array[m][n] 表示有 m 行 n 列的二维数组。
例如,下图所示的书柜索引示意图就是一个图形化的二维数组,它包含了每个书柜所在行、列的位置信息。

图 1 书柜索引示意图
二维数组的定义
二维数组的根本意义就是“一维数组的数组”,二维数组的第 1 维就是数据的起始地址,第 2 维就是某个数据中的某个值。例如,在图 1 中找到 4104 的位置,此时需要定义二维数组 iArray[3][3],先找第 1 维的第 4 行,再找第 2 维的第 4 列,就可以准确找到位置。
二维数组的声明与一维数组的类似,一般形式如下:
数据类型 数组名[常量表达式1][常量表达式2];其中,常量表达式 1 被称为行索引,常量表达式 2 被称为列索引。
如果有二维数组 array[n][m],则二维数组索引的取值范围如下:
- 行索引的取值范围为 0~n-1;
- 列索引的取值范围为 0~m-1;
- 二维数组索引最大的元素是 array[n-1][m-1]。
例如,定义一个 3 行 5 列的整型数组,代码如下:
int array[3][5];这一行代码说明定义了一个 3 行 5 列的数组,数组名为 array,其索引为整型。该数组的索引共有 3×5 个,即:
array[0][0]、array[0][1]、array[0][2]、array[0][3]、array[0][4] array[1][0]、array[1][1]、array[1][2]、array[1][3]、array[1][4] array[2][0]、array[2][1]、array[2][2]、array[2][3]、 array[2][4]在 C语言中,二维数组是按行排列的,即按行顺序存放,先存放 array[0] 行,再存放 array[1]行。每行中的元素也是依次存放的。
二维数组的初始化
二维数组的初始化同样也是为二维数组各元素赋予初值,例如:int array[2][2]={{5,2},{5,4}};上述代码表示的二维数组形式如下:
5 2 5 4对于各个元素值来说,array[0][0] 的值是 5、array[0][1] 的值是 2、array[1][0] 的值是 5、array[1][1] 的值是 4。
在 C语言中,对二维数组的初始化可以用以下几种方法实现。
1) 可以将所有数据写在一个花括号内,按照数组元素排列顺序对元素赋值,例如:
int array[2][2]={1,2,3,4};上述代码表示的二维数组形式如下:
1 2
3 4
2) 在为所有元素赋初值时,可以省略行索引(不能省略列索引),例如:
int array[][3]={1,2,3,4,5,6};系统会根据数据的个数进行分配,这里共有 6 个数据,而数组每行分为 3 列,当然可以确定数组为 2 行。
上述代码表示的二维数组形式如下:
1 2 3 4 5 6对于各个元素值来说,array[0][0] 的值是 1、array[0][1] 的值是 2、array[0][2] 的值是 3、array[1][0] 的值是 4、array[1][1] 的值是 5、array[1][2] 的值是 6。
3) 也可以通过分行给数组元素赋值,例如:
int array[2][3]={{1,2,3},{4,5,6}};上述代码表示的二维数组形式如下:
1 2 3 4 5 6对于各个元素值来说,array[0][0] 的值是 1、array[0][1] 的值是 2、array[0][2] 的值是 3、array[1][0] 的值是 4、array[1][1] 的值是 5、array[1][2] 的值是 6。
4) 在分行赋值时,只对部分元素赋值,未被赋值的元素系统默认设置值为 0,例如:
int array[2][3]={{1,2},{4,5}};上述代码表示的二维数组形式如下:
1 2 0 4 5 0对于各个元素值来说,array[0][0] 的值是 1、array[0][1] 的值是 2、array[0][2] 的值是 0、array[1][0] 的值是 4、array[1][1] 的值是 5、array[1][2] 的值是 0。
5) 直接对数组元素赋值,例如:
int array[2][2]; array[0][0] = 1; array[0][1] = 2; array[1][0] = 1; array[1][1] = 2;上述代码表示的二维数组形式如下:
1 2 1 2对于各个元素值来说,array[0][0] 的值是 1、array[0][1] 的值是 2、array[1][0] 的值是 1、array[1][1] 的值是 2;
二维数组的使用
二维数组元素使用的一般形式如下:数组名[索引][索引];二维数组的下标可以是整型常量或整型表达式。
例如:
int array[2][2]={{5,2},{5,4}}; //定义二维数组 array[1][1]; //引用二维数组元素上述代码的第 2 行表示的是对 array 数组中第 2 行的第 2 个元素进行引用。
这段代码表示的二维数组形式如下:
5 2 5 4
注意,不管是行下标还是列下标,都是从 0 开始的。这里要注意索引越界的问题,例如:
int array[3][5]; … /*对数组元素赋值*/ array[3][5]=19; /*错误的引用!*/这段代码的表示方法是错误的。标识符 array 为 3 行 5 列的数组,它的行索引的最大值为 2、列索引的最大值为 4,所以 array[3][5] 超出了数组的范围,索引越界。
【实例】用二维数组求下表中各科的平均成绩。
学生 | 科目 | 宋小美 | 张大宝 | 高心心 | 彭果 | 邓丽 |
---|---|---|---|---|---|---|
数学 | 93 | 87 | 90 | 76 | 70 | |
语文 | 90 | 76 | 60 | 80 | 81 | |
英语 | 70 | 88 | 72 | 77 | 96 |
具体代码如下:
#include <stdio.h> int main() { int i, j, s = 0, average, course[3], array[3][5]; //定义变量和二维数组 printf("请输入成绩:\n"); for (i = 0; i < 3; i++) //遍历二维数组行 { for (j = 0; j < 5; j++) //遍历二维数组列 { printf("array[%d][%d]=",i,j); scanf("%d", &array[i][j]); //输出成绩 s = s + array[i][j]; //计算成绩 } course[i] = s / 5; //求每科的平均成绩 s = 0; //重新赋值 } printf("数学的平均成绩(取整数)是:%d\n语文的平均成绩(取整数)是:%d\n英语的平均成绩(取整数)是:%d\n", course[0], course[1], course[2]); return 0; }运行结果为:
请输入成绩: array[0][0]=93 array[0][1]=95 array[0][2]=90 array[0][3]=91 array[0][4]=98 array[1][0]=80 array[1][1]=81 array[1][2]=93 array[1][3]=84 array[1][4]=85 array[2][0]=87 array[2][1]=80 array[2][2]=90 array[2][3]=78 array[2][4]=79 数学的平均成绩(取整数)是:93 语文的平均成绩(取整数)是:84 英语的平均成绩(取整数)是:82