C语言 数组的初始化 数组不初始化会怎样 数组的默认初始值

本程序用于测试:数组的初始化。
(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;
    }
    
    • 运行结果
      在这里插入图片描述
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值