16

我正在学习 C++ 并且有一个我找不到答案的问题。

char常量(使用单引号)和字符串常量(使用双引号)有什么区别?

我所有与 char 数组 vs 相关的搜索结果std::string。我追求和之间的'a'区别"a"

执行以下操作会有所不同:

cout << "a";
cout << 'a';
4

6 回答 6

35

'a'是字符文字。它是 type char,在大多数系统上的值为 97 (字母的 ASCII/Latin-1/Unicode 编码a)。

"a"是一个字符串文字。它的类型const char[2]是 ,并且是指一个由 2 组成的数组,char其中包含'a''\0'。在大多数(但不是全部)上下文中,对的引用"a"将被隐式转换为指向字符串第一个字符的指针。

两个都

cout << 'a';

cout << "a";

碰巧产生相同的输出,但出于不同的原因。第一个打印单个字符值。第二个连续打印字符串的所有字符(终止字符除外'\0')——恰好是单个字符'a'

字符串文字可以任意长,例如"abcdefg". 字符文字几乎总是只包含一个字符。(您可以使用多字符文字,例如'ab',但它们的值是实现定义的,而且很少有用。)

(在 C 中,你没有问过,'a'是 type int,并且"a"是 type char[2](no const))。

于 2012-07-01T02:29:11.203 回答
4

"a"是一个字符数组,恰好只包含一个字符,或者如果你\0在最后算上两个字符。'a'是一个字符。他们不是一回事。例如:

#include <stdio.h>

void test(char c) {
    printf("Got character %c\n", c);
}

void test(const char* c) {
    printf("Got string %s\n", c);
}

int main() {
    test('c');
    test("c");
}

这将使用两种不同的重载;有关演示,请参见http://codepad.org/okl0UcCN 。

于 2012-07-01T02:28:43.163 回答
1

单引号用于包围字符文字。双引号用于包围字符串(字符数组)文字。

许多接口,例如cout <<,都接受。

于 2012-07-01T02:28:52.110 回答
0

单引号'a'是类型的文字char。双引号"a"chars 的以 null 结尾的字符串文字。

于 2012-07-01T02:32:18.363 回答
0
  • "a" -> 它表示它是一个字符串。在 c++ 中,字符串是字符数组的集合。
  • 所以字符串由分隔符'\0'终止,它表示字符串的结尾。
  • 所以它的大小将是 2 因为“a”为 1 字节,“\0”为 1 字节

如果是 'a'-> 它是单个字符。所以它的大小是1字节。

char str[]="a"; 

或者

char *ptr = "c";

for  'c' -> char c = 'a';

或者我们也可以写

char c = 97;
于 2014-03-16T10:53:09.243 回答
-1

'a' - 1) 字符常量 2) 大小 - 1 个字符 3) 不是字符数组的集合

"a" -1) 字符串字面量 2) 大小 - 2 个字符 3) 字符数组的集合

于 2014-10-06T06:18:28.123 回答