char temp是什么意思[3] ="";?

chi*_*ana 6 c++ arrays

通常在C++,字符数组按以下方式初始化,

char example[5]="cat";
Run Code Online (Sandbox Code Playgroud)

如果用""(只是双引号没有空格)初始化它会怎么样?
初始化后字符数组中的元素是什么?

Gri*_*han 12

声明

char    temp[3] = "";
Run Code Online (Sandbox Code Playgroud)

和...一样

char    temp[3] = {0};
                  // `\0` ascii value is 0
Run Code Online (Sandbox Code Playgroud)

记住初始化的半初始化数组的剩余元素0.

点:char temp[3] = ""容易type(意味着写入),所以其是优选的.

看起来甚至将它与此声明进行比较char temp[3] = {'\0'}; (它需要更多的字符type)而在char temp[3] = ""; 简单中(即使没有类型不匹配 - int/char).

  • 它甚至与`char temp [3] = {};`相同 (3认同)
  • = {}将所有元素设置为默认值.对于整数,它为0. (2认同)

And*_*mas 9

它是一个3个字符的数组,初始化为三个空字符.

编辑(以下评论后):

来自K&R:

如果数组的初始值设定项少于指定的数量,则外部,静态和自动变量的缺失元素将为零.

...

字符数组是初始化的特例; 可以使用字符串代替大括号和逗号表示法:

char pattern [] ="ould";

是一个较长但速度相同的简写

char pattern [] = {'o','u','l','d','\ 0'};

C++标准草稿副本,第8.5.2节,字符数组:

"1. char数组(无论是普通字符,有符号字符还是无符号字符),char16_t数组,char32_t数组或wchar_t数组可以通过窄字符文字,char16_t字符串文字,char32_t字符串文字或宽字符串文字来初始化,分别用大括号括起来的适当类型的字符串文字.字符串文字值的连续字符初始化数组的元素.[例如:

char msg [] ="行%s上的语法错误\n";

显示一个字符数组,其成员使用字符串文字初始化.请注意,因为'\n'是单个字符,并且因为附加了尾随'\ 0',所以sizeof(msg)为25. - 结束示例]

...

"3.如果初始化器的数量少于数组元素,则未明确初始化的每个元素都应进行零初始化(8.5)."

  • 这都是他们所有人."如果初始化器提供的元素太少,则假定剩余的数组元素为0." [Stroustrup,"C++编程语言"]另外,要小心通过测试确定C++行为 - 不仅编译器之间存在变体行为,而且一组可能未初始化的数据全部为零. (5认同)