使用字符串文字和不同字符列表初始化数组声明时有什么区别?

时间:2011-05-10 09:32:15

标签: c++

char short_string[] = "abc"   
char short_string[] = {'a', 'b', 'c'}   

我认为不同的是第二行是一个switch语句,它需要来自用户的输入(ab或c,因为第一行更多是一个语句....这是对的吗?

3 个答案:

答案 0 :(得分:9)

没有。这不是一个转换声明。 这两行都是初始化的变量声明。区别在于:

char short_string[] = "abc"

声明short_string null终止的c-string 内存转储:0x61, 0x62, 0x63, 0x00
可变长度(以字节为单位):4

虽然第二行:

char short_string[] = {'a', 'b', 'c'}

将short_string声明为字节数组 内存转储:0x61, 0x62, 0x63
可变长度(以字节为单位):3

答案 1 :(得分:0)

第一个语句声明并初始化一个内容为abc的字符串(包括终止为零) - 这是一个长度为四个字符的字符数组。

第二个语句声明一个包含三个字符abc的字符数组 - 它的几乎与第一个相同,除了没有终止零(不是正确的字符串)。

另外: C / C ++中的所有语句都必须以分号结束。

答案 2 :(得分:0)

区别在于第一个选项将分配三个字符和一个尾随空(x'00') 第二个选项将分配相同的三个字符,但没有尾随null,如果您尝试使用任何str ....系列函数,则会导致问题。