提问者:小点点

A和A有什么区别?


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

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

我的所有搜索结果都与字符数组vsstd::string相关。 我想知道'a'“a”之间的区别。

这样做会有什么不同吗:

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

共3个答案

匿名用户

“a”是字符文本。 它的类型为char,在大多数系统中的值为97(字母a的ASCII/Latin-1/Unicode编码)。

“a”是字符串文本。 它的类型为常量char[2],引用了一个由2个char组成的数组,值为'a''\0'。 在大多数(但不是所有)上下文中,对“a”的引用将隐式转换为指向字符串第一个字符的指针。

两者

cout << 'a';

cout << "a";

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

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

(在C语言中,'a'的类型为int,而“a”的类型为char[2](没有const)。

匿名用户

“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<<)都接受这两种。