类型说明符 数组名「常量表达式」[常量表达式」;
通常多维数组的定义形式有连续两个或两个以上“「常量表达式」”。例如:
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。
所以数组a5有2行。
(6)用按行赋初值方法,对各行的部分或全部元素赋初值,并省略第一维的元素个数。例如:
int a6[][3]={{O,2},{}};
也能确定数组a6共有2行。
4.3 字符数组和字符串
1.字符数组
如果数组的元素类型是字符型(char),则此数组就是字符数组。字符数组的每个元素只能存放一个字符( 存放字符的ASCII代码)。
字符数组的定义形式与其它数组的定义形式一样:
char字符数组名[元素个数];
例如:
char S[5];
表示数组S有五个元素,每个元素能存放一个字符,整个数组最多可存放五个字符。字符数组元素的引用方法也与普通数组元素的引用方法相同。
字符数组也可与普通数组一样的初始化,字符数组也可利用字符串常量给字符数组初始化。例如:
char aStr[]={“12345”};
并可省略花括弧,简单地写为:
char aStr[]=“ 12345” ;
注意:字符数组aStr[]的元素有六个,不是五个。用字符串常量对字符数组初始化,C系统会在字符列末尾添加一个字符串结束符。