246

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

4

14 回答 14

329

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

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

于 2010-09-10T09:45:56.677 回答
50

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

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

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

const uint32_t png_ihdr = 'IHDR';

生成的常量(在 GCC 中实现了这个)具有通过获取每个字符并将其向上移动获得的值,因此“I”最终位于 32 位值的最高有效位中。显然,如果您正在编写独立于平台的代码,则不应该依赖它。

于 2010-09-10T11:00:45.810 回答
31

单引号是字符 ( char),双引号是空终止字符串 ( char *)。

char c = 'x';
char *s = "Hello World";
于 2010-09-10T09:45:51.690 回答
22
于 2014-05-18T14:01:02.607 回答
12

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

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

99 25443

那是因为 25443 = 99 + 256*99

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

干杯

于 2012-05-20T21:29:37.990 回答
10

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

char myChar     = 'A';
char myString[] = "Hello Mum";
char myOtherString[] = { 'H','e','l','l','o','\0' };
于 2010-09-10T09:46:31.043 回答
8
  1. single quote是为了character
  2. double quote是为string
于 2010-09-10T10:26:04.803 回答
7

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

于 2010-09-10T09:46:00.780 回答
6

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

char str[] = "Hello world";

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

char c = 'x';

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

于 2010-09-10T09:46:16.933 回答
5

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

例如...

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

输出

a  
Hello World

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

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

输出 :

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

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

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

于 2015-08-11T13:57:18.780 回答
2

使用带有单字符的单引号作为:

char ch = 'a';

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

将双引号与字符串一起使用:

char str[] = "foo";

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

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

于 2010-09-10T09:50:04.940 回答
2

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

在 Java 中也是如此。

于 2014-08-05T01:07:10.683 回答
1

虽然我确定这不能回答原始提问者的问题,但如果您最终在这里寻找像我一样的文字整数中的单引号......

C++14 增加了在数字文字中间添加单引号 (' ) 的功能,以便为数字添加一些视觉分组。

constexpr int oneBillion = 1'000'000'000;
constexpr int binary = 0b1010'0101;
constexpr int hex = 0x12'34'5678;
constexpr double pi = 3.1415926535'8979323846'2643383279'5028841971'6939937510;
于 2021-09-29T20:09:16.813 回答
0

在 C 和 C++ 中,单引号称为字符 ('a'),而双引号称为字符串 ("Hello")。不同之处在于,一个字符可以存储任何内容,但只能存储一个字母/数字等。字符串可以存储任何内容。但也要记住'1'和1之间是有区别的。如果你输入cout<<'1'<<endl<<1; 输出将是相同的,但在这种情况下不同:

cout<<int('1')<<endl<<int(1);

这次第一行是 48。当你将一个字符转换为 int 时,它会转换为它的 ascii,而 '1' 的 ascii 是 48。同样,如果你这样做:

string s="Hi";
s+=48; //This will add "1" to the string
s+="1"; This will also add "1" to the string
于 2020-11-05T16:47:50.740 回答