使用缓冲区[100] = {0,}的初始化如何在C语言中工作?

Geo*_*rge 8 c

在用C语言编写的程序的加载数据部分中,我看到缓冲区的初始化是这样完成的:

char buffer[100] = {0, };
Run Code Online (Sandbox Code Playgroud)

但是我不确定这个陈述赋予了什么值.请分享一些想法.

这取决于编译器还是语言功能?

如果此语句等​​效于以下,那么在该零之后使用逗号的重点是什么:

char buffer[100] = {0};
Run Code Online (Sandbox Code Playgroud)

是不是因为编码器只想确保第一个元素为零,而不关心其余元素?

Dav*_*nan 12

这取决于编译器还是语言功能?

行为由语言标准指定.当前的标准(C11 §6.7.9初始化/ 21,这是在141页)介绍,当你不是总的要素供给较少的初始化发生了什么:

如果括号括起的列表中的初始值设定项少于聚合的元素或成员,或者用于初始化已知大小的数组的字符串文字中的字符数少于数组中的元素,则聚合的其余部分应为隐式初始化与具有静态存储持续时间的对象相同.

因此,未指定的元素将初始化为\0.


Ric*_*dle 6

给出的值(0在这种情况下为单个),然后所有其他成员都用零填充.

如果你说char buffer[100] = {1, };,阵列将包含1和99零.