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