我正在学习C ++并且有一个我无法找到答案的问题。
char
常量(使用单引号)和字符串常量(带双引号)之间有什么区别?
我的所有搜索结果都与char数组vs std::string
有关。我追求'a'
和"a"
之间的区别。
执行以下操作会有区别吗?
cout << "a";
cout << 'a';
答案 0 :(得分:23)
'a'
是一个字符文字。它的类型为char
,大多数系统的值为97(字母a
的ASCII / Latin-1 / Unicode编码)。
"a"
是一个字符串文字。它的类型为const char[2]
,指的是包含值char
和'a'
的2 '\0'
个数组。在大多数(但不是全部)上下文中,对"a"
的引用将被隐式转换为指向字符串第一个字符的指针。
两个
cout << 'a';
和
cout << "a";
碰巧产生相同的输出,但出于不同的原因。第一个打印单个字符值。第二个连续打印字符串的所有字符(终止'\0'
除外) - 恰好是单个字符'a'
。
字符串文字可以任意长,例如"abcdefg"
。字符文字几乎总是只包含一个字符。 (你可以拥有多字符文字,例如'ab'
,但它们的值是实现定义的,它们很少有用。)
(在C中,您没有询问,'a'
的类型为int
,"a"
的类型为char[2]
(无const
))。
答案 1 :(得分: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了解演示。
答案 2 :(得分:1)
单引号用于包围字符文字。双引号用于包围字符串(字符数组)文字。
许多接口(例如cout <<
)都接受。
答案 3 :(得分:0)
单引号'a'
是char
类型的文字。双引号"a"
是以char
为单位的以空字符结尾的字符串文字。
答案 4 :(得分:0)
在'a'的情况下 - >它是单个字符。所以它的大小是1字节。
char str[]="a";
或
char *ptr = "c";
for 'c' -> char c = 'a';
或者我们也可以写
char c = 97;
答案 5 :(得分:-1)
&#39;一个&#39; - 1)字符常数 2)大小 - 1个字符 3)不是Character数组的集合
&#34;&#34; -1)字符串文字 2)大小 - 2个字符 3)Character数组的集合