C或C ++中的单引号与双引号


Answers:


282

在C和C ++中,单引号标识单个字符,而双引号创建字符串文字。'a'是一个字符文字,而"a"一个字符串文字包含一个'a'和一个空终止符(即2个字符的数组)。

在C ++中,字符文字的类型为char,但请注意,在C中,字符文字的类型为int,即sizeof 'a'在整数为32位(而CHAR_BIT为8)的体系结构中为4,而sizeof(char)在各处均为1。


47

一些编译器还实现了扩展,该扩展允许多字符常量。C99标准说:

6.4.4.4p10:“整数字符常量的值由实现定义,该常量包含多个字符(例如'ab'),或者包含不映射到单字节执行字符的字符或转义序列。 ”

例如,可能看起来像这样:

const uint32_t png_ihdr = 'IHDR';

所得的常数(在实现此功能的GCC中)具有通过获取每个字符并将其向上移位而获得的值,以便“ I”以32位值的最高有效位结尾。显然,如果要编写独立于平台的代码,则不应依赖于此。


7
谢谢,我只是在一些代码中看到了这一点,我的回答只能描述为“ WTF”。我一直在使用和关闭GCC已有15年了,到目前为止,从未使用过它。
eeeeaaii 2012年

除魔术头外,还+1,通常用于命令行评估。
2014年

28

单引号是字符(char),双引号是以null结尾的字符串(char *)。

char c = 'x';
char *s = "Hello World";

8
“ hello world”是一个const char *
OldSchool 2015年

@Eiko何时将变量的*放在前面,例如* s?
CodeGuru 2015年

@CodeGuru当变量是指针类型时,请使用*。在这种情况下,“ s”指向一个字符数组。
Eiko

16
  • 'x' 是整数,代表机器字符集中字母x的数值
  • "x"是一个字符数组,两个字符长,由‘x’后面的‘\0’

2
很晚了;)您的答案中真正有什么新东西-与已经给出的答案相比?
2014年

10

单引号用于单个字符。双引号用于字符串(字符数组)。如果愿意,可以使用单引号将一个字符串一次构建一个字符串。

char myChar     = 'A';
char myString[] = "Hello Mum";
char myOtherString[] = { 'H','e','l','l','o','\0' };

10

我在玩这样的东西:int cc ='cc'; 碰巧它基本上是按字节复制到整数。因此,看待它的方法是将基本上为2 c的“ cc”复制到整数cc的低2个字节中。如果您正在寻找琐事,那么

printf("%d %d", 'c', 'cc'); would give:

99 25443

那是因为25443 = 99 + 256 * 99

因此,“ cc”是一个多字符常量,而不是字符串。

干杯



6

双引号用于字符串文字,例如:

char str[] = "Hello world";

单引号用于单字符文字,例如:

char c = 'x';

编辑正如大卫在另一个答案中所述,字符文字的类型为int


谢谢 。表示字符是1个字节,末尾没有空字符'/ 0'..字符串末尾有空字符。
Vishwanath Dalvi

2
@mr_eclair:字符串文字总是包含一个隐式的空终止符,但是要小心。你可以写像char str[] = {'H','e','l','l','o'};,并且str不会有一个空终止。
奥利弗·查尔斯沃思

在这种情况下,str它不是字符串(至少不是C样式的字符串,它定义为NTBS)。
史蒂夫·杰索普

@史蒂夫:了解。我对@mr_eclair的观点是,并非所有内容char[](人们通常将其称为“字符串”)都是以空值结尾的。
奥利弗·查尔斯沃思

1
@OliCharlesworth,这是-幸运的是-并非全部道理:这是两个字符串文字,用注释分隔:"hello" /*seamlessly connected to*/ "world"。对于注释多行的消息,这可能很有意义。
2014年

6

在C语言中,单引号(例如“ a”)表示字符常量,而“ a”是字符数组,始终以0字符结尾


4

单引号用于字符,而双引号用于字符串。

例如..

 printf("%c \n",'a');
 printf("%s","Hello World");

输出量

你好世界

如果反之亦然,则使用单引号表示字符串,使用双引号表示字符。在这里,这将是结果;

  printf("%c \n","a");
  printf("%s",'Hello World');

输出:

第一行。您将获得垃圾值或意外值。或者您可能会得到如下输出。

而第二条语句。您什么也看不到。还有一件事。在此之后,如果您还有其他声明。他们也不会给您任何结果。

注意:PHP语言使您可以灵活地轻松使用单引号和双引号。


3

单引号表示字符,双引号表示字符串。

在Java中也是如此。


2
这实际上并没有为问题增加任何价值,因为此信息已包含在其他答案中。
Mike Precup 2014年

2

使用单引号和单字符作为:

char ch = 'a';

'a'是一个char常量,它等于ASCIIchar a 的值。

对字符串使用双引号作为:

char str[] = "foo";

"foo"是一个字符串文字。

可以使用,"a"但不能使用'foo'

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.