c语言定义数组变量初始化为0,c语言数组初始化——int a[N] = {0};

初学数组,以华科的《c 语言与程序设计》为教材,参考了《一站式学习c编程》,后者数组一章有串代码如下

int main(void)

{

int i, histogram[10] = {0};

gen_random(10);

for (i = 0; i < N; i++)

histogram[a[i]]++;

...

}

书上指出“首先把histogram的所有元素初始化为0“, 在两本书上我都未找到对应明确的语法描述

我们知道,不进行显式初始化的情况下,全局变量以及静态变量的初始均为0,局部变量(自动变量)随机

int main(void)

{

a[5] = { 1, 2 };

return 0;

}

上面定义的数组a[0] = 1, a[1] = 2一定,之后未知,我用gcc编译后gdb跟踪

4647c2da50ca722795e4234b5dc6828e.png

之后初始为0,是个忧伤的故事

还是来实验下int a[5]; 与 int a[5] = {0};吧

#includeint main(void)

{

int a[5];

return 0;

}

c8d408675c5727dd1e162a3f75b570b9.png

显然随机...

int main(void)

{

int a[5] = {0};

return 0;

}

6936b7c2b9f9d39abc659dca21e774c4.png

貌似把全部数组元素都初始化成0了,存疑,是否因为初始化a[0]后其余数组元素同时默认初始为0? 我们再来试试这条语法

int main(void)

{

int a[5] = {1};

return 0;

}

228bd38acbf7efee76a87b99e2e97cc5.png

说明初始化数组中一个数后其余元素同时初始化为0(至少在我用的gcc里),而并非全部初始化。

那么, a[5] = {0}将数组中元素全初始化为0,这句话是错误的,没有这条语法;“首先把histogram的所有元素初始化为0“,这句话是不严谨的。

实验获得,准确性未知。

———————  ——————  —————  ———————  —————  —————  —————  ————

经过yulinlang的提醒,我翻阅了K&R数组初始化(4.9)节,早已说过

——如果初始化表达式的个数比数组元素少,则对外部变量、静态变量和自动变量来说,没有初始化的表达式的元素将被初始化为0。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值