我们定义一个数组,只是在内存中申请了一个连续的地址空间。空间大小是sizeof(data_type)*number. dat_type指的是数组元素的数据节本类型,sizeof是C语言的运算符,可以返回一个dat_type的数据占用的地址空间,单位为字节。我原来一位sizeof是C语言的函数库,但在有些资料介绍sizeof是C语言的运算符,性质与"+ 、-、 *、/ 、% "相同。想想也对。因为sizeof可以随时使用,不用#include。理解为运算符更加合理。 number是数组元素的数量。
int a[15];
该语句也就是声明了一块内存,空间大小为sizeof(int)*12个字节空间。既然数组是内存中一块连续的地址空间,那么他的物理地址在哪里,如果只是简单的使用数组是不需要知道的。因为系统会自动安排的。比如我们参照一本书上的例子:
#include
#define MONTHS 12
int main ( void )
{
unsigned char i;
unsigned char month[MONTHS]={31,28,31,30,31,30,31,31,30,31,30,31} ;
for(i=0;i
{
printf("%d月有%d天\n",i+1, minth[i]);
}
return 0;
}
我们打印出了每个月的天数。

我们再声明数组时初始化了数组,使用for语句遍历数组,通过下标访问了数组。
我们改写一下该代码
#include
#define MONTHS 12
int main ( void )
{
unsigned char i;
unsigned char month[MONTHS]={31,};
for(i=0;i
printf("%d月有%d天\n",i+1,month[i]);
return 0;
}
我们初始化时并没有初始化晚12个月,运行结果如下:

除了第一个元素师31外,其余全为0,因为我们再初始化过程中只初始化第一个元素。但是其余元素的值都自动初始化为0.不是一个偶然而是一个必然。C语言就是这么规定。只要对数组其中一个元素初始化时赋值,其余元素值都会默认为0。
如果我们不做任何初始化会怎样??我们试一下
#include
#define MONTHS 12
int main ( void )
{
unsigned char i;
unsigned char month[MONTHS];//={31,};
for(i=0;i<1MONTHS i++)
printf("%d月有%d天\n",i+1,month[i]);
return 0;
}

所有数组元素的值为204,值为204是一个偶然现象。因为如果不做任何初始化内存的内容没有任何规律。大家可以自己试一下。
介绍一下C99中的新内容
unsigned char month[MONTHS];//={{5}=31, {7}=31 } ;
只对第5个元素和第7个元素赋初值,其余为0.在有些C编译器中是不支持的。