前言
在前面我们学习了一维数组,但是有的问题需要用二位数组来解决。
二维数组常称为矩阵,把二维数组写成行和列的排列形式,可以有助于形象化的理解二维数组的逻辑结构。
一、二维数组的定义
二维数组定义的一般格式:
数据类型 数组名[常量表达式1] [常量表达式2] ;
例如:int a[4][10];
a数组实质上是一个有4行、10列的表格,表格中可储存40个元素。第1行第1列对应a数组的
a[0][0],第n行第m列对应数组元素a[n-1][m-1]。
在C语言中,二维数组中元素的排列顺序是按行排放的,即在内存中先顺序存放第一行的元素
接着存放第二行的元素......
二、二维数组的引用
二维数组的数组元素引用与一维数组元素引用类似,区别在于二维数组元素的引用必须给出
两个下标。
引用的格式为:
数组名 [下标1] [下标2]
例如:int a[3][5];
则表示a是二维数组(相当于一个3*5的表格),共有3*5=15个元素,它们是:
a[0][0] a[0][1] a[0][2] a[0][3] a[0][4]
a[1][0] a[1][1] a[1][2] a[1][3] a[1][4]
a[2][0] a[2][1] a[2][2] a[2][3] a[2][4]
因此可以看成一个矩阵(表格),a[2][3]即表示第3行第4列的元素。
三、二维数组的初始化
1.全部赋初值
int a[3][4]={{1,2,3,4},{5,6,7,8},{9,10,11,12}};
第1个括号是第1行的数据,第2个括号是第2行的数据,第3个括号是第3行的数据。
int a[3][4]={1,2,3,4,5,6,7,8,9,10,11,12};
这写法与上面的表达效果一样,但是还是第一种方法好,界限清除。
2.部分赋初值
int a[3][4]={{1},{5},{9}};相当于:
int a[3][4]={{1},{0,5},{1,1,9}};相当于:
int a[3][4]={{1},{0},{1,1,9}};相当于:
3.特殊赋初值
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};
这两种定义方式等价,系统会自动通过总个数和第二维的长度算出第一维的长度。
四、二维数组程序例子
将一个二为数组的的行与列的元素互换,存到另一个二维数组中。
#include<stdio.h>
int main()
{
int a[2][3]={{1,2,3},{4,5,6}};
int b[3][2];
int i,j;
printf("array a: \n");
for(i=0;i<=1;i++)
{
for(j=0;j<=2;j++)
{
printf("%5d",a[i][j]);
b[j][i]=a[i][j];
}
printf("\n");
}
printf("array b: \n");
for(i=0;i<=2;i++)
{
for(j=0;j<=1;j++)
{
printf("%5d",b[i][j]);
}
printf("\n");
}
return 0;
}
array a:
1 2 3
4 5 6
array b:
1 4
2 5
3 6
PS C:\csay\cyuyan>
可以定义两个数组,数组a为3行2列存放指定的六个数,数组b为3行2列,开始时未赋值,只
要a数组中的元素a[i][j]存放到b数组中的b[j][i]元素就可以了,用嵌套的for循环可完成此任务 。