C语言数组的初始化总结

本人第一次发表微博 ,所发内容大部分来自对博友的发表微博的总结,程序是亲自测试过的,如果内容有不对或者不严谨的地方,请高手不吝指教。


/*

本程序用于测试:数组的初始化。

(1) 定义数组后必须要初始化,不要认为不初始化,系统就会自动初始化为0;如果不初始化,局部变量在栈上,各数组元素的值将是随机数;

(2) 数组初始化:程序员至少必须把数组元素的第一个数组元素初始化为0,剩余的元素系统会自动初始化为0; 实际上,把数组初始化为0是在编译时完成的。

(3) 初始化值的个数可少于数组元素个数.当初始化值的个数少于数组元素个数时,前面的按序初始化相应值, 后面的初始化为0;

(4) 如果明确指定了数组大小,当在初始化时指定的元素个数超过这个大小就会产生错误. 例如:int array_test[3]={1,2,3,4} 超出了数组元素个数的界限;

(5) 当数组定义时没有指定大小,当初始化采用列表初始化了,那么数组的大小由初始化时列表元素个数决定。

(6) 一般来说 全局变量、静态变量处于数据区,默认初始化为0 (如果指定初始值,则为指定的值)局部数组根据编译器的特点有所不一样。

(7) 静态局部变量和全局变量一样,数据都存放在全局区域,所以在主程序之前,编译器已经为其分配好了内存,在C中,初始化发生在代码执行之前,编译阶段分配好内存之后,
就会进行初始化.

*/


#include <stdio.h>
#include <string.h>
#include <stdint.h>

static int array_static_global[6];   // 定义全局静态数组

int array_global[6];    // 定义全局数组
 
int main()
{
  int  array_1[6];             // 只定义数组,并未初始化;如果不初始化,那么各数组元素的值将是随机数;局部变量处于堆栈区,其数值是随机的,即当时内存中的值;

  int  array_2[6]={0};         // 程序员至少必须把数组元素的第一个数组元素初始化为0,才能使剩余的元素自动初始化为0;array_2[6]={0}; <=> array_2[6]={0,0,0,0,0,0};
 
  int  array_3[6]={1};         // 该程序并不是把所有元素都赋值为1,只是第一个元素为1,其余都是0;array_3[6]={1}; <=> array_3[6]={1,0,0,0,0,0};

  int  array_4[6]={1,2,3};     // 当初始化值的个数少于数组元素个数时,前面的按序初始化相应值,后面的初始化为0; array_4[6]={1,2,3};<=> array_4[6]={1,2,3,0,0,0};

  int  array_5[]={1,2,3,4,5};  // 当数组定义时没有指定大小,当初始化采用列表初始化了,那么数组的大小由初始化时列表元素个数决定。array_5[]={1,2,3,4,5};<=> array_5[5]={1,2,3,4,5};

  static int array_local_static[6];  //定义静态局部变量,未初始化,系统会自动初始化为0;
   
 
  for(int i=0; i<6;i++)

  {
   printf("array_1[%d]=%d\n",i, array_1[i]);    //  array_1[6]未初始化,输出结果为随机值

   printf("array_2[%d]=%d\n",i, array_2[i]);    //  array_2[6]只初始化第一个数,其余系统自动赋值为0

   printf("array_3[%d]=%d\n",i,array_3[i]);     //  array_2[6]只有第一个元素为1,其余系统自动赋值为0
   
   printf("array_4[%d]=%d\n",i,array_4[i]);     //  array_2[6]初始化一部分,前面的按序初始化相应值1,2,3,后面的系统自动初始化为0

   printf(" the array_5[] element of size is %d\n",sizeof(array_5)/sizeof(array_5[0]));  // array_5[]有5个初始化值,所以 array_5[]有5个元素:array_5[5]

   printf("array_static_global[%d]=%d\n",i,array_static_global[i]);  // array_static_global[6]为全局静态数组,在未初始化时,系统自动初始化为0;

   printf("array_global[%d]=%d\n",i,array_global[i]);   // array_global[6]为全局静态数组,在未初始化时,系统自动初始化为0;

   printf("array_local_static[%d]=%d\n",i,array_local_static[i]);  // array_local_static[6]静态局部变量,定义后未初始化,系统会自动初始化为0;
  }

 return 0;

}

C语言数组的初始化总结