c语言 数组初始化非零,C语言与单机-28-数组初始化

我们定义一个数组,只是在内存中申请了一个连续的地址空间。空间大小是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;

}

我们打印出了每个月的天数。

4430fba0ebb4655ccad2c6de2d73e356.png

我们再声明数组时初始化了数组,使用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个月,运行结果如下:

559d1f3c81fe669829f09e29631e14ba.png

除了第一个元素师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;

}

1178f61d0ae05e25326377cbfa328265.png

所有数组元素的值为204,值为204是一个偶然现象。因为如果不做任何初始化内存的内容没有任何规律。大家可以自己试一下。

介绍一下C99中的新内容

unsigned char month[MONTHS];//={{5}=31,   {7}=31 } ;

只对第5个元素和第7个元素赋初值,其余为0.在有些C编译器中是不支持的。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值