{0}和""之间有什么区别?

md5*_*md5 7 c

我想知道是否存在以下区别:

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)"如果有在大括号内的列表更少初始化比有元件或聚集体的成员,或更少的字符在字符串文本用来初始化已知大小的阵列比有在元件对于数组,聚合的其余部分应与具有静态存储持续时间的对象隐式初始化."

  • 在n1570中,它是6.4.4.4,第(5)和(10)点,也是(12).`'\ 0'`只是编写`int` 0的另一种方式. (3认同)
  • @Philip我没有引用标准,但这里是K&R 2nd所说的*"字符常量'\ 0'表示零值的字符,空字符.'\ 0'经常被写为0而不是0强调某些表达式的字符性质,但数值只是0."* (2认同)

Dan*_*her 10

在这种情况下,没有区别,都将数组的所有插槽初始化为0.通常,""仅适用于char 数组(有或没有const或类似的修改unsigned),但{0}适用于所有数字类型的数组.

在标准(n1570)的第6.7.9节中,第21点读取

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

所以甚至""初始化完整的数组.