|
因为字符数组是普通数组,所以它们遵循与这些数组相同的规则。例如,要使用一些预定的字符序列初始化一个字符数组,我们可以像任何其他数组一样执行此操作:
1
char myword[] = { 'H', 'e', 'l', 'l', 'o', '\0' };
上面声明了一个由 6 个元素组成的数组,这些元素使用构成单词的字符加上末尾的 null 字符初始化。
但是字符元素数组还有另一种初始化方式:直接使用字符串文字。
在前几章的一些示例中使用的表达式中,字符串文字已经多次出现。这些是通过将文本括在双引号 () 之间来指定的。例如:char"Hello"'\0'"
1
"the result is: "
这是一个字符串文本,可能在前面的一些示例中使用。
用双引号 () 括起来的字符序列是文本常量。事实上,它们的类型是以 null 结尾的字符数组。这意味着字符串文本始终在末尾自动附加一个 null 字符 ()。
因此,调用的 char 元素数组可以通过以下两个语句之一使用以 null 结尾的字符序列进行初始化:"'\0'myword
1
2
char myword[] = { 'H', 'e', 'l', 'l', 'o', '\0' };
char myword[] = "Hello";
在这两种情况下,字符数组的大小都声明为 6 个元素 类型:组成单词的 5 个字符加上最后一个 null 字符 (),它指定序列的结尾,在第二种情况下,当使用双引号 () 时,它会自动附加。
请注意,这里我们谈论的是在声明字符数组时初始化它,而不是稍后为它们分配值(一旦它们已经声明)。事实上,由于字符串文本是常规数组,因此它们具有与这些数组相同的限制,并且不能赋值。
表达式(一旦 myword 已按上述方式声明),例如:mywordchar"Hello"'\0'"
1
2
myword = "Bye";
myword[] = "Bye";
将无效,就像两者都无效:
myword = { 'B', 'y', 'e', '\0' };
这是因为无法为数组赋值。但请注意,它的每个元素都可以单独分配一个值。例如,这是正确的:
myword[0] = 'B';
myword[1] = 'y';
myword[2] = 'e';
myword[3] = '\0';
|
|