在C或C++编程中,何时应该使用单引号和双引号?
'a'
是一个单个字符字面值,而"a"
是一个包含'a'
和空终止符(即一个2个字符数组)的字符串字面值。char
,但请注意,在C中,字符字面值的类型为int
,即在一个整数为32位的体系结构中,sizeof 'a'
为4(其中CHAR_BIT为8),而sizeof(char)
在任何地方都是1。有些编译器还实现了一种扩展功能,允许多字符常量。C99标准规定:
6.4.4.4p10:“包含多个字符(例如'ab')或包含一个不能映射为单字节执行字符的字符或转义序列的整型字符常量的值是由实现定义的。”
例如,这可能看起来像这样:
const uint32_t png_ihdr = 'IHDR';
在实现这个功能的GCC编译器中,生成的常量值是通过将每个字符向上移位来获得的,以便使得'I'出现在32位值的最高有效位。显然,如果你要编写跨平台代码,就不应该依赖于此。
单引号是字符(char
),双引号是以null结尾的字符串(char *
)。
char c = 'x';
char *s = "Hello World";
const char *
。 - OldSchoolchar *
,而不是一个const char *
。 - Jack Murrow'x'
是一个整数,代表计算机字符集中字母 x 的数值"x"
是一个字符数组,长度为两个字符,由字符 ‘x’
和 ‘\0’
组成我在探究像这样的东西:int cc = 'cc'; 发现这基本上是将它字节复制到整数。因此,可以这样理解,'cc' 基本上是 2 个 c 被复制到整数 cc 的低 2 字节中。如果你在寻找小知识点的话,
printf("%d %d", 'c', 'cc'); would give:
这是因为25443 = 99 + 256 * 99。
所以'cc'是一个多字符常量,不是字符串。
祝你好运!
25443 = 99 + 256*99
为什么是256*99? - uzay95单引号用于表示单个字符,双引号用于表示字符串(字符数组)。如果你愿意,你可以使用单引号逐个字符构建字符串。
char myChar = 'A';
char myString[] = "Hello Mum";
char myOtherString[] = { 'H','e','l','l','o','\0' };
单引号
用于表示 字符(character)
;双引号
用于表示 字符串(string)
。'a'
表示字符常量,而"a"
表示一组由\0
字符终止的字符数组。双引号用于字符串字面量,例如:
char str[] = "Hello world";
单引号用于单个字符字面量,例如:
char c = 'x';
编辑 正如David在另一个答案中所述,字符字面值的类型是int
。
char str[] = {'H','e','l','l','o'};
,并且str
将没有空终止符。 - Oliver Charlesworthchar[]
都是以null结尾的。 - Oliver Charlesworth单引号用于表示字符,双引号用于表示字符串。
printf("%c \n",'a');
printf("%s","Hello World");
a
Hello World
printf("%c \n","a");
printf("%s",'Hello World');
对于第一行,您将获得一个垃圾值或意外的值,或者您可能会得到以下输出:
�
对于第二个语句,您将看不到任何结果。还有一件事,如果在此之后有更多语句,它们也将不会给您任何结果。
注意:PHP语言使您可以轻松使用单引号和双引号。
int
。需要了解更多吗? - 0_0perplexedstd::string
的一种类型。相反,如果没有前缀(如L、u8等),类型为const char[N]
(参考)。实际上,即使std::string
在其底层数组中包含空终止符,它也会“隐藏”空终止符。 - starriet