编译器如何填充char array[100] = {0};
中的值?它背后的魔力是什么?
我想知道编译器内部是如何初始化的。
最佳答案
这不是魔法。
此代码在 C 中的行为在 C 规范 (online draft of C spec) 的第 6.7.8.21 节中进行了描述:对于没有指定值的元素,编译器将指针初始化为 NULL 并将算术类型初始化为零(并递归地将其应用于聚合)。
此代码在 C++ 中的行为在 C++ 规范 (online draft of C++ spec) 的第 8.5.1.7 节中进行了描述:编译器聚合初始化没有指定值的元素。
另外,请注意,在 C++(但不是 C)中,您可以使用空的初始化列表,导致编译器聚合初始化数组的所有元素:
char array[100] = {};
至于当你这样做时编译器可能会生成什么样的代码,看看这个问题:Strange assembly from array 0-initialization
关于c++ - array[100] = {0} 如何将整个数组设置为 0?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/629017/