一维数组
一维数组中的元素是排列成一行的,当需要存放一行或一列数据时常用一维数组。一维数组的元素常用“数组名[下标]”来表示,其中,下表是从0开始的。例如:a[0]="hello";a[1]="world";
1)数据类型可以是任何基本类型。
2)数组名是按照“标识符”的规则构成的。
3)长度是一个“整形常量表达式”,通常是一个整形常量。
4)一个数组定义语句中可以只定义一个数组,也可以定义多个数组,还可以同时定义数组和变量。
引用数组元素时,系统并不检查下标是否越界,即下标可以不在0~长度-1的合法范围内。但由于下标越界,超出数组元素的合法范围,会造成程序运行结果的不可预料。
【说明】下标越界大多是针对数组来说的。比如你定义的数组的长度是10。那么你的数组里就有10个元素,他们的小标分别是从0--9。如果下标大于9了,这就叫下标越界了。
例子:short y[2];
y[2]=10; scanf("%f",&y[3]); y[1]=y[4];
一维数组的初始化赋值:
数组元素和变量一样,可以在定义数组时赋予初值,称为数组的初始化。
例如:int a[5]={1,2,3,4,5}; int a[]={1,2,3,4,5}; int a[10]={1,2,3,4,5}(其余的五个下标赋值为0)
写个简单的例子:从键盘上输入10个字符,然后按相反次序输出。
void main{
char a[10];
int i;
for(i=0;i<10;i++){
scanf("%c".&a[i]);
}
for(i=9; i>=0;i--){
printf("%c",a[i]);
}
}
对于一维数组类型说明应注意以下几点:
1) 数组的类型实际上是指数组元素的取值类型。对于同一个数组,其所有元素的数据类型都是相同的。
2) 数组名的书写规则应符合标识符的书写规定。
3) 数组名不能与其它变量名相同。例如:int a; double a[10];
4) 方括号中常量表达式表示数组元素的个数,如a[5]表示数组a有5个元素。但是其下标从0开始计算。因此5个元素分别为a[0], a[1], a[2], a[3], a[4]。
5) 不能在方括号中用变量来表示元素的个数,但是可以是符号常数或常量表达式。例如:int a =4;int b[a];
6) 允许在同一个类型说明中,说明多个数组和多个变量。例如:int a,b,c,d,k1[10],k2[20];
二维数组
数组元素的下标在2个或2个以上,这样的数组成为多位数组。
【格式】数据类型 数组名 [行长度][列长度],......;
【说明】
#数据类型可以是任何基本类型,也可以是后面将要介绍的其他数据类型,如指针,结构等。
#数组名师按照“标识符”的规则构成的。
#行长度和列长度都是一个“整型常量表达式”,表示该二维数组有“行长度”行“列长度”列个数组元素。
#一个数组定义语句中可以只定义一个二维数组,也可以定义多个二位数组,可以在一个定义语句中同时定义一维和二维数组,还可以同时定义变量。
二维数组定义举例
int a[3][3];
定义一个3行3列共9个元素的整形二维数组a。其元素为:
a[0][0],a[0][1],a[0][2]
a[1][0],a[1][1],a[1][2]
a[2][1],a[2][1],a[2][2]
1)分行给二维数组所有元素赋初值
int a[2][3]={{1,2,3},{4,5,6}};
其中{1,2,3}是赋给第0行3个数组元素的,也可以看成是赋予二维数组a中一维数组a[0]的;{4,5,6}是赋给第1行3个数组元素的,也可以看成是赋予二维数组a中一维数组a[1]的。
2)不分行给多维数组所有元素赋初值
int a[2][3]={1,2,3,4,5,6};
各元素获得的初值和第1中方式的结果完全相同。C语言规定,用这种方式给二维数组赋初值时,是先按行,后按列的顺序进行的,即前3个初值是赋予第0行元素的,后3个初值是赋予第1行元素的。
3)只对每行的前若干个元素赋初值,此时所有未赋初值的数组元素均获得零值
int a[2][3]={{1},{4,5}};
a[0][0]值为1,a[0][1]值为0,a[0][2]值为0;
a[1][0]值为4,a[1][1]值为5,a[1][2]值为0;
4)只对前若干行的前若干个元素赋初值,此时所有未赋初值的数组元素均获得零
char a[2][3]={{‘1‘,‘2‘}};
a[0][0]值为‘1‘,a[0][1]值为‘2‘,a[0][2]值为‘\0‘;
a[1][0]值为‘\0‘,a[1][1]值为‘\0‘,a[1][2]值为‘\0‘;
5)若给所有元素赋初值,行长度可以省略
float a[][3]={{1,2,3},{4,5,6}};
自动认为数组a[][3]的行长度是2.
6)若分行给所有行的前若干个元素赋初值,行长度可以省略。
float a[][3]={{1},{2,3}};
自动认为数组a[][3]的行长度是2/