编译器如何填充值char array[100] = {0};?它背后的魔力是什么?我想知道内部编译器如何初始化。
3 回答
达令说
TA贡献1821条经验 获得超6个赞
这不是魔术。
C规范的第6.7.8.21节(C规范的在线草案)中描述了C中此代码的行为:对于没有指定值的元素,编译器将指针初始化为NULL,将算术类型初始化为零(并递归地将其应用于聚合)。
C ++中的代码行为在C ++规范的8.5.1.7节(C ++规范的在线草案)中描述:编译器聚合初始化没有指定值的元素。
另请注意,在C ++(但不是C)中,您可以使用空的初始化列表,从而使编译器聚合初始化数组的所有元素:
char array[100] = {};
至于编译器在执行此操作时可能生成的代码类型,请查看以下问题:数组0初始化的奇怪组件
慕桂英4014372
TA贡献1871条经验 获得超13个赞
实现取决于编译器开发人员。
如果您的问题是“这种声明会发生什么” - 编译器会将第一个数组元素设置为您提供的值(0),其他所有数组元素将设置为零,因为它是省略的数组元素的默认值。
- 3 回答
- 0 关注
- 2076 浏览
添加回答
举报
0/150
提交
取消