设有定义:
int x[20], i;
以下代码实现顺序输入数组X的全部元素:
for(i=0; i<20;i++)
scanf("%d",&x[i]);
4.2 二维数组和多维数组
1.多维数组定义
数组也可以是多维的。现以二维数组为例介绍二维及二维以上的多维数组。二维数组的定义形式为
类型说明符 数组名「常量表达式」[常量表达式」;
通常多维数组的定义形式有连续两个或两个以上“「常量表达式」”。例如,
float a[2][3],b[3][4]; /*两个二维数组*/
float c[2][2][3] ;/*一个三维数组*/
定义数组a为2行3列,数组b为3行4列。C语言把二维数组看作是一种特殊的一维数组,即它的元素又是一个数组。例如,对于上述定义的数组a,把它看作有两个元素的一维数组:
a[0]和 a[l]
每个元素又是一个包含3个元素的一维数组。通常,一个n维数组可看作是一个一维数组,而它的元素是一个(n-1)维的数组。C语言对多维数组的这种观点和处理方法,使数组的初始
化、引用数组的元素以及用指针表示数组带来很大的方便。
在C语言中,二维数组的元素的存放顺序是按行存放的,即从数组的首地址开始,先顺序存放第一行的元素,再存放第二行的元素。通常,对于一个多维数组,它的元素在内存中的存放顺序有这样特点:第一维的下标变化最慢,最右边的下标变化最快。
2.引用多维数组元素
引用二维数组元素的表示形式为
数组名[下标][下标]
通常,引用n维数组元素的表示形式为数组名之后紧接连续n个“[下标]”。
在用下标引用数组的元素时,应该注意下标值的有效性,应在已定义的对应维大小的范围内,即大于等于0和小于对应维的元素个数。
3.多线数组初始化
多维数组的初始化方法也有多种,以二维数组的初始化方法为例说明其初始化方法。
(1)按行给二维数组的全部元素赋初值。例如
int al[2][3]={{1,2,3 },{4,5,6 }};
这种赋初值方法比较直观,第一个花括弧内的数据给第一行的元素赋初值,第二个花括弧内的数据给第二行的元素赋初值,依次类推,按行给数组的全部元素赋初值。
(2)按元素的存储顺序给数组元素赋初值。例如,
int a2[2][3]= {1,2,3,4,5,6 };
这种赋初值方法结构性差,容易遗漏。
(3)按行给数组的部分元素赋初值。例如,
int a3[2][3]={{1,2},{0,5}};
其效果是使a3[0][0]=l,a3[0][1]=2,a3[1][0]=0,a3[1][l]=5,其余均为0。
(4)按元素的存储顺序给前面部分元素赋初值。例如,
int a4[2][3]={1,2,3,4 };
其效果是使a4[0][0]=1,a4[0][l]=2,a4[0][2]=3,a4[1][0]=4,其余均为0。
(5)按元素的存储顺序,给数组部分或全部元素赋初值,并且不指定第一维的元素个数。例如,
int a5[][3]={l,2,3,4,5 };
系统会根据结出的初始数据个数和其它维的元素个数确定第一维的元素个数。其效果是使:
a5[0][0]=1,a5[0][1]=2,a5[0][2]= 3,
a5[1][0]=4,a5[l][l]=5,a5[1][2]=0。