通常在 中C++
,字符数组按以下方式初始化,
char example[5]="cat";
如果你用""
(只是一个没有空格的双引号)初始化它怎么办?
初始化后字符数组中的元素是什么?
宣言
char temp[3] = "";
和
char temp[3] = {0};
// `\0` ascii value is 0
记住用 初始化的半初始化数组的剩余元素0
。
点:char temp[3] = ""
很容易(type意味着写作),所以它更可取。
甚至将其与此声明进行比较char temp[3] = {'\0'};
(它需要更多字符type)而 inchar temp[3] = "";
很简单(即使没有类型不匹配 - int/char)。
这是一个初始化为三个空字符的 3 字符数组。
编辑(在下面的评论之后):
来自 K&R:
如果数组的初始值设定项少于指定数量,则外部、静态和自动变量的缺失元素将为零。
...
字符数组是初始化的一种特殊情况;可以使用字符串代替大括号和逗号表示法:
字符模式[] = "旧";
是更长但等效的简写
字符模式[] = { 'o', 'u', 'l', 'd', '\0' };
"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(这也是空终止符)。
您将第一个元素设置为空终止字符。其他元素部分初始化为零:C 和 C++:自动结构的部分初始化