c++数组初始化

c++数组初始化写法

1.buf[size] = {0}; 

char buf[4] = {0};

上述代码执行以后,整个buf都初始化为0,跟我们大部分人的预想是一样。

2.buf[size] = {value};  // value != 0

char buf[4] = {1};

上述代码执行以后, buf里的值是[0x1, 0x0, 0x0, 0x0]。  可能很多人会认为整个数组都会初始化成0x1,但是实际上不是的。

3. 那么我们要把buf初始化成全是0x1, 该怎么写。

char buf[4] = {0x1, 0x1, 0x1, 0x1};

或者

char buf[4];
memset(buf, 0x1, sizeof(buf));

为什么 = {0}可以初始化成功, 而 = {1}只能初始化第一个char?

情况1:初始化数组时,给所有元素都附上值,这是一个好习惯,代码无歧义。 缺点就是数组很长时, 代码冗余难写。

情况2:初始化数组时,只有前面若干元素有指定赋值, 如果省略没赋值的,按照默认构造函数来构造元素。这是 = {0}符合预期, 而={1}不符合的原因,因为char默认构造为0了,而且这个看编译器,你很难明确编译器是否默认构造为0。因此强烈建议不要使用这种方式来初始化。


总结:

代码要正确,也要明确。所有带有歧义的用法我们都要避免。

因此数组的初始化建议都用memset函数来实现。

如果不是char数组,而是int数组的话,可以通过for循环来初始化。

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值