我想知道是否存在以下区别:
char s[32] = "";
Run Code Online (Sandbox Code Playgroud)
和:
char s[32] = {0};
Run Code Online (Sandbox Code Playgroud)
谢谢.
oua*_*uah 18
两个声明之间没有区别:
char bla[32] = {0};
and
char bla[32] = "";
Run Code Online (Sandbox Code Playgroud)
参见C标准的相关段落(强调我的):
(C99,6.7.8p21)"如果有在大括号内的列表更少初始化比有元件或聚集体的成员,或更少的字符在字符串文本用来初始化已知大小的阵列比有在元件对于数组,聚合的其余部分应与具有静态存储持续时间的对象隐式初始化."
Dan*_*her 10
在这种情况下,没有区别,都将数组的所有插槽初始化为0.通常,""仅适用于char 数组(有或没有const或类似的修改unsigned),但{0}适用于所有数字类型的数组.
在标准(n1570)的第6.7.9节中,第21点读取
如果括号括起的列表中的初始值设定项少于聚合的元素或成员,或者用于初始化已知大小的数组的字符串文字中的字符数少于数组中的元素,则聚合的其余部分应为隐式初始化与具有静态存储持续时间的对象相同.
所以甚至""初始化完整的数组.