本程序用于测试:数组的初始化。
(1)定义数组后必须要初始化,不要认为不初始化,系统就会自动初始化为O;如果不初始化,局部变量在栈上,各数组元素的值将是随机数;
(2)数组初始化:程序员至少必须把数组元素的第一个数组元素初始化为O,剩余的元素系统会自动初始化为O;实际上
把数组初始化为O是编译时完成的
(3 初始化值的个数可少于数组元素个数,当初始化值的个数少于元素个数时,前面的值按序初始化为相应的值,后面的初始化为0;
(4)如果明确指定了数组大小,当在初始化时指定的元素个数超过这个大小就会产生错误.例如: int array_test[3]=[1.2.3.4]超出了数组元素个数的界限;
(5)当数组定义时没有指定大小,当初始化采用列表初始化了,那么数组的大小由初始化时列表元素个数决定。
(6)一般来说全局变量、静态变量处于数据区,默认初始化为O〈如果指定初始值,则为指定的值)局部数组根据编译器的特点有所不一样。
(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]; /* 程序员至少必须把数组元素的第一个数组元素初始化为O, 才能使剩余的元素自动初始化为O;array_2[6]={0};<=> array_2[6]={O,0,0,0,0,0};*/ int array_2[6] = {0}; /* 该程序并不是把所有元素都赋值为1.只是第一个元素为1,其余都是O; array_3[6]={1};<=> array_3[6]={ 1,0,0,0,0,0};*/ int array_3[6] = { 1 }; /* 当初始化值的个数少于数组元素个数时,前面的按序初始化相应值.后面的初始化为O; array_4[6]={1,2,3};<=> array_4[6]={1,2,3,0,0,0]; */ int array_4[6] = { 1, 2,3 }; /*当数组定义时没有指定大小,当初始化采用列表初始化了,那么数组的大示笛初始化时 列表无素个数决定。array_5[]={1,2,3,4,5};<=> array_5[5]={1,2,3,4,5]; */ int array_5[] = { 1, 2, 3, 4, 5 }; static int array_local_static[6];//定义静态局部变量,未初始化,系统会自动初始化为0; int i = 0; for (int i = 0; i < 6; i++) { // array_1[6]未初始化,输出结果为随机值 printf("array_1[%d]=%d\n", i, array_1[i]); // array_2[6]只初始化第一个数,其余系统自动赋值为O printf("array_2[%d]=%d\n", i, array_2[i]); // array_2[6]只有第一个元素为1,其余系统自动赋值为O printf("array_3[%d]=%d\n", i, array_3[i]); // array_2[6]初始化一部分,前面的按序初始化相应值1,2.3.后面的系统自动初始化为O printf("array_4[%d]=%d\n", i, array_4[i]); // array_static_global[6]为全局静态数组,在未初始化时,系统自动初始化为O; printf("array static_global[2] % d] = % d\n", i, array_static_global[i]); // array_global[6]为全局静态数组,在未初始化时,系统自动初始化为O; printf("array_global[ % d] = %d\n", i, array_global[i]); // array_local_ static[6]静态局部变量,定义后未初始化,系统会自动初始化为O: printf("array_local_ static[%d]=%d\n", i, array_local_static[i]); } // array_5[有5个初始化值,所以array_5[]有5个元素:array_5[5] printf("the array_5[] lement of size is %d\n", sizeof(array_5) / sizeof(array_5[0])); return 0; }
- 运行结果
- 运行结果