10.1 数组
数组由数据类型相同的一系列元素组成。需要使用数组时,通过声明数组告诉编译器数组中内含多少个元素和这些元素的类型。编译器根据这些信息正确地创建数组。普通变量可以使用的类型,数组元素都可以用。
方括号[]表明变量名是数组名,方括号中的数字表明数组中的元素个数。
要访问数组中的元素,通过使用下标数(也称为索引)表示数组中的各元素。数组元素的编号从0开始。
10.1.1 初始化数组
数组通常被用来存储程序需要的数据。
只存储单个值的变量有时也称为标量变量(scalar variable)。
C使用新的语法来初始化数组,如下所示:
int main( void ){
int powers[8] = { 1, 2, 4, 6, 8, 16, 32, 64 }; /*从ANSI C开始支持这种初始化*/
...
}
用以逗号分隔的值列表(用花括号括起来)来初始化数组,各值之间用逗号分隔,在逗号和值之间可以使用空格。根据上面的初始化,把1赋给数组的首元素,依次类推。不支持ANSI的编译器会把这种形式的初始化识别为语法错误,在数组声明前加上关键字static可解决此问题。
打印每个月的天数。
/* day_mon1.c -- prints the days for each month */
#include <stdio.h>
#define MONTHS 12
int main(void)
{
int days[MONTHS] = {31,28,31,30,31,30,31,31,30,31,30,31};
int index;
for (index = 0; index < MONTHS; index++)
printf("Month %d has %2d days.\n", index +1,
days[index]);
return 0;
}
/* 数组:
*/
这个程序不够完善,每4年打错一个月份的天数(即,2月份的天数)。
使用了符号常量MONTHS表示数组大小,这是我们推荐且常用的做法。修改十分方便。
注意 使用const声明数组
有时需要把数组设置为只读。这样,程序只能从数组中检索值,不能把新值写入数组。要创建只读数组,应该用const声明和初始化数组。因此,程序清单10.1中初始化数组应改成:
const int days[MONTHS] = {31,28,31,30,31,30,31,31,30,31,30,31};
和普通变量一样,应该使用声明来初始化const数据,因为一旦声明为const,便不能再给它赋值。
初始化数组失败怎么办?
/* no_data.c -- uninitialized array */
#include <stdio.h>
#define SIZE