使用const声明数组
有的时候需要把输入设置为只读,这样程序员只能从数组中检索值,而不能把新值写入数组。要创建只读数据库,应该用const声明和初始化数组。
这样修改后,程序在运行过程中就不能修改该数组中的内容。
一旦声明为const便不能再给他赋值。
const int a[12]={31,28,31,30,31,30,31,31,30,31,30,31};
这样修改后,程序在运行过程中就不能修改该数组中的内容。
一旦声明为const便不能再给他赋值。
数组初始化的一些问题
初始化列表中的项数应与数组的大小一致。当初始化列表中的值少于数组元素个数时,编译器会把剩余的元素都初始化为零。#include <stdio.h>
#define SIZE 4
int main()
{
int some_date[SIZE] = {1492,1066};
int i;
printf("%2s%14s\n","i","some_date[i]");
for(i = 0;i < SIZE;i++)
{
printf("%2d%14d",i,some_date[i]);
}
return 0;
}
输出结果就是:
i some_date[i]
0 1492
1 1066
2 0
3 0
注意:在for循环中的测试条件。由于人工计算容易出错,所以让计算机来计算数组的大小。sizeof运算符给出它的运算对象的大小(以字节为单位)。
所以sizeof days是整个数组的大小(以字节为单位),sizeof days[0]是数组的一个元素的大小(以字节为单位)。整个数组的元素个数就是(sizeof days)/(sizeof days[0])。
c99制定初始化器
与传统的c初始化语法,在c99里面提供了一些方便于设计者初始化指定元素的方法:
int arr[6] = {0,0,0,0,0,212}; //若要指定arr[5]为212,传统语法要对6个元素全部初始化
int arr[6] = {[5] = 212};//而在c99里,只需这样就可以使arr[5]=212
上面两种初始化方法等价。
如果未指定数组大小会怎样?
int stuff[] = {1,[6] = 233};
int staff[] = {1,[6] = 233,23,2333};
编译器会把数组的大小设置为足够装得下初始化的值,所以stuff数组中有七个元素,各个元素的下标为0~6。而staff数组有九个元素。