2

这是如何运作的::

char Test1[8] = {"abcde"} ;

AFAIK,这应该存储在 Test1 的内存中

a b c d e 0 SomeJunkValue SomeJunkValue

相反,它被存储为:

a b c d e 0 0 0

初始化只在字符串文字之后添加一个尾随 NULL 字符,但是如何以及为什么将所有其他数组成员初始化为NULL?此外,任何关于底层方法或功能的链接或任何概念性想法:char TEST1[8] = {"abcde"} ;都会非常有帮助。怎么:

char Test1[8] = {"abcde"} ;

不同于

char Test1[8] = "abcde" ;

?

4

1 回答 1

8

部分初始化的聚合的未指定成员被初始化为该类型的零。

6.7.9 初始化

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

10 - [...] 如果具有静态或线程存储持续时间的对象未显式初始化,则:

  • 如果是指针类型,则初始化为空指针;
  • 如果它具有算术类型,则将其初始化为(正或无符号)零;[...]

对于 array char Test1[8],初始化器{"abcde"}"abcde"6.7.9:14 完全等效:

字符类型的数组可以由字符串文字或 UTF-8 字符串文字初始化,可选地用大括号括起来。

于 2012-09-26T07:40:47.200 回答