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

mr_*_*air 190 c c++ syntax char string-literals

我应该何时在C或C++编程中使用单引号和双引号?

Dav*_*eas 261

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

在C++中,字符文字的类型是char,但请注意,在C中,字符文字的类型是int,sizeof 'a'在整数为32位(和CHAR_BIT为8)的体系结构中为4,而sizeof(char)在任何地方都是1.


unw*_*ind 43

一些编译器还实现了一个允许多字符常量的扩展.C99标准说:

6.4.4.4p10:"包含多个字符(例如,'ab')的整数字符常量的值,或包含未映射到单字节执行字符的字符或转义序列的值是实现定义的. "

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

const uint32_t png_ihdr = 'IHDR';
Run Code Online (Sandbox Code Playgroud)

产生的常量(在GCC中实现这一点)具有通过获取每个字符并将其向上移动所获得的值,因此"I"最终位于32位值的最高有效位中.显然,如果您正在编写与平台无关的代码,则不应该依赖于此.

  • 谢谢,我刚刚在一些代码中看到了这一点,我的回复只能被描述为"WTF".我一直在使用GCC 15年,直到现在才开始使用GCC. (7认同)

Eik*_*iko 24

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

char c = 'x';
char *s = "Hello World";
Run Code Online (Sandbox Code Playgroud)

  • "hello world"是一个`const char*`. (6认同)
  • @OldSchool **在 C++ 中,是的,但在 C 中,不是。在 C 中,它是“char *”,而不是“const char *”。** (2认同)

mar*_*nas 15

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


Gra*_*and 9

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

char myChar     = 'A';
char myString[] = "Hello Mum";
char myOtherString[] = { 'H','e','l','l','o','\0' };
Run Code Online (Sandbox Code Playgroud)


san*_*ket 9

我在寻找类似的东西:int cc ='cc'; 碰巧它基本上是一个按字节顺序复制到整数.因此,查看它的方法是将基本为2 c的'cc'复制到整数cc的低2字节.如果你正在寻找琐事,那么

printf("%d %d", 'c', 'cc'); would give:
Run Code Online (Sandbox Code Playgroud)

99 25443

那是因为25443 = 99 + 256*99

所以'cc'是一个多字符常量而不是字符串.

干杯


小智 7

  1. single quote是为了character;
  2. double quote是为了string.


Jen*_*edt 5

在C单引号中,如'a'表示字符常量,而"a"是一个字符数组,总是以0字符结尾


Oli*_*rth 5

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

char str[] = "Hello world";
Run Code Online (Sandbox Code Playgroud)

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

char c = 'x';
Run Code Online (Sandbox Code Playgroud)

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

  • @mr_eclair:字符串*literal*总是包含一个隐式的null终止符,但要小心.你可以写一些像`char str [] = {'H','e','l','l','o'};`,`str`将*不*有一个空终止符. (2认同)

Haf*_*Ali 5

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

例如...

 printf("%c \n",'a');
 printf("%s","Hello World");
Run Code Online (Sandbox Code Playgroud)

输出

a  
Hello World
Run Code Online (Sandbox Code Playgroud)

如果您在反之亦然的情况下使用这些,并为字符串使用单引号,为字符使用双引号,结果将是:

  printf("%c \n","a");
  printf("%s",'Hello World');
Run Code Online (Sandbox Code Playgroud)

输出 :

对于第一行。你会得到一个垃圾值或意外值,或者你可能会得到这样的输出:

?
Run Code Online (Sandbox Code Playgroud)

而对于第二个语句,您将什么也看不到。还有一件事,如果你在这之后有更多的陈述,他们也不会给你任何结果。

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