首页 > 编程笔记 > C语言笔记 阅读:16

C语言二维数组详解(非常详细)

通义灵码
C语言中的二维数组可以看作是特殊的一维数组,其各个元素仍然是一个数组。

定义二维数组的形式如下:
数据类型 数组名[常量表达式1][常量表达式2];
其中,“常量表达式1”定义了二维数组的行数,“常量表达式2”定义了二维数组的列数。

不管是行下标还是列下标,其索引都是从 0 开始的。因此,一个 m 行 n 列的二维数组 array[m][n],其行下标取值范围为 0~m−1,列下标取值范围为 0~m−1,最大下标元素是 array[m−1][n−1]。

例如,定义一个 3 行 4 列的整型数组,代码如下:
  • int array[3][4];
二维数组 array[3][4] 共包含 12 个数组元素(3×4),分别为:

array[0][0]、array[0][1]、array[0][2]、array[0][3]
array[1][0]、array[1][1]、array[1][2]、array[1][3]
array[2][0]、array[2][1]、array[2][2]和array[2][3]

可见,C语言中数组是按行排列的,数组 array[3][4] 在内存中先按行顺次存放,依次为 array[0] 行、array[1] 行和 array[2] 行,每行有 4 个元素,也依次存放。

C语言二维数组的引用

二维数组元素的引用形式为“数组名[下标][下标]”。例如,array[1][2] 表示对 array 数组的第 2 行第 3 个元素进行引用。

和一维数组一样,二维数组也要注意下标越界的问题。例如:
  • int array[2][4];
  • ...
  • array[2][4]=9; //错误,下标越界!

C语言二维数组的初始化

二维数组赋初值,有以下 4 种情况。

1) 将所有数据写在一个大括号内,按照数组元素排列顺序对元素赋值。例如:
  • int array[2][2] = {1,2,3,4};
如果大括号内的数据少于数组元素的个数,则系统会默认后面未被赋值的元素值为 0。

2) 为所有元素赋初值时,可以省略行下标,但不能省略列下标。例如:
  • int array[][3] = {1,2,3,4,5,6};
系统会根据数据的个数进行分配,一共有 6 个数据,而数组分为 3 列,因此数组有 2 行。

3) 分行给数组元素赋值。例如:
  • int a[2][3] = {{1,2,3},{4,5,6}};
在分行赋值时,可以只对部分元素赋值。例如,下面的代码中:
  • int a[2][3] = {{1,2},{4,5}};

4) 直接对数组元素赋值。例如:
  • int a[2][3];
  • a[0][0] = 1;
  • a[0][1] = 2;

【实例】一个 3×3 的网格,将 1~9 的数字放入方格中(矩阵中心元素为 5),使得每行、每列以及每条对角线上的 3 个数相加都相同。通过键盘为二维数组元素赋值,并显示二维数组。
  1. #include<stdio.h>
  2. int main()
  3. {
  4. int a[3][3]; /*定义二维数组*/
  5. int i,j; /*定义循环控制变量*/
  6. for(i=0;i<3;i++) /*先行后列,依次输入数据,为数组元素赋值*/
  7. {
  8. for(j=0;j<3;j++)
  9. {
  10. printf("a[%d][%d]=",i,j);
  11. scanf("%d",&a[i][j]);
  12. }
  13. }
  14. printf("输出二维数组:\n"); /*信息提示*/
  15. for(i=0;i<3;i++) /*先行后列,循环输出所有数组元素的值*/
  16. {
  17. for(j=0;j<3;j++)
  18. {
  19. printf("%d\t",a[i][j]); /*使用制表符控制间距,可排列更整齐*/
  20. }
  21. printf("\n"); /*使数组元素分行显示*/
  22. }
  23. return 0;
  24. }
程序先依次输入相应的数组元素值,然后将这个 3 行 3 列的数组输出:
运行程序,输出结果为:
a[0][0]=2
a[0][1]=7
a[0][2]=6
a[1][0]=9
a[1][1]=5
a[1][2]=1
a[2][0]=4
a[2][1]=3
a[2][2]=8
输出二维数组:

2       7       6
9       5       1
4       3       8

C语言二维数组的应用

【实例】本实例中,把二维数组中各行的元素换成列元素,各列的元素换成行元素,生成一个新的二维数组。代码如下:
  1. #include<stdio.h>
  2. int main()
  3. {
  4. int a[2][3],b[3][2]; /*定义两个数组*/
  5. int i,j; /*定义循环控制变量*/
  6. for(i=0;i<2;i++) /*先行后列,输入数据,为数组元素赋值*/
  7. {
  8. for(j=0;j<3;j++)
  9. {
  10. printf("a[%d][%d]=",i,j);
  11. scanf("%d",&a[i][j]);
  12. }
  13. }
  14. printf("输出二维数组:\n"); /*信息提示*/
  15. for(i=0;i<2;i++) /*先行后列,循环输出二维数组 a 中的元素*/
  16. {
  17. for(j=0;j<3;j++)
  18. {
  19. printf("%d\t",a[i][j]);
  20. }
  21. printf("\n"); /*使数组元素分行显示*/
  22. }
  23. for(i=0;i<2;i++) /*将数组 a 转置后存入数组 b 中*/
  24. {
  25. for(j=0;j<3;j++)
  26. {
  27. b[j][i] = a[i][j]; /*通过行列互换,b 为 a 的转置数组*/
  28. }
  29. }
  30. printf("输出转换后的二维数组:\n");
  31. for(i=0;i<3;i++) /*先行后列,循环输出转置数组 b 中的元素*/
  32. {
  33. for(j=0;j<2;j++)
  34. {
  35. printf("%d\t",b[i][j]);
  36. }
  37. printf("\n"); /*使数组元素分行显示*/
  38. }
  39. return 0;
  40. }

运行程序,显示效果为:
a[0][0]=12
a[0][1]=34
a[0][2]=25
a[1][0]=78
a[1][1]=65
a[1][2]=95
输出二维数组:
12      34      25
78      65      95
输出转换后的二维数组:
12      78
34      65
25      95

相关文章