C语言局部数组变量初始化:指定首元素为1其余是否默认置0?属标准还是编译器定义行为?
局部数组部分初始化的行为说明
可以保证该数组首元素被设为1,其余元素均被设为0,这是C标准明确规定的行为,不属于编译器定义行为。
在C语言的标准规则中,当对数组进行部分初始化时,未被显式赋值的元素会被自动初始化为对应类型的零值:
- 对于整数类型(包括
uint16_t这类无符号整数),零值就是0; - 对于指针类型,零值是空指针;
- 对于结构体等复合类型,会递归地将每个成员初始化为对应零值。
对应到给出的代码:
#include <stdint.h> int main () { uint16_t arr[10] = {1}; }
数组arr的第一个元素被显式赋值为1,剩下的9个元素都会被标准强制初始化为0,所有符合C标准的编译器都会遵循这个规则,结果是确定的。
内容的提问来源于stack exchange,提问作者unalignedmemoryaccess
相关产品推荐
相关产品推荐

