我正在学习C++,有一个问题我无法找到答案。
单引号表示的char
常量和双引号表示的字符串常量之间有什么区别?
所有与char数组和std::string
有关的搜索结果都与我的问题不符。我想知道'a'
和"a"
之间的区别。
做以下操作是否会有区别:
cout << "a";
cout << 'a';
'a'
是一个字符字面量,类型为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'
的类型是 int
,而 "a"
的类型是 char[2]
(无const
)。)
const char[]
类型,但是<string>
定义了一个std::string
类型。C++从C继承了字符串字面值;std::string
是特定于C++的。 - Keith Thompsonstd::string
没有以'\0'
空字符结尾外,其他都一样。 - Keith Thompson'a'
这样的字符字面量具有char
类型 - 但在C中,它具有int
类型。 - Jerry Coffin"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进行演示。
单引号用于包围字符字面量。双引号用于包围字符串(字符数组)字面量。
许多接口,例如cout <<
,都可以接受其中任意一种。
而对于'a'的情况->它是单个字符。因此,它的大小将为1个字节。
char str[]="a";
或者
char *ptr = "c";
for 'c' -> char c = 'a';
或者我们也可以这样写
char c = 97;
单引号'a'
是类型为char
的字面量。双引号"a"
是以空字符结尾的char
字符串字面量。
'a' - 1) 字符常量 2) 大小为1的字符 3) 不是字符数组集合
"a" -1) 字符串字面值 2) 大小为2的字符 3) 是字符数组集合