我正在學習C++,並有一個問題,我找不到答案。'a'和'a'有什麼區別?
一個char
常量(使用單引號)和一個字符串常量(帶雙引號)之間的區別是什麼?
我所有與char數組相關的搜索結果與std::string
。我是在'a'
和"a"
之間的差異之後。
會不會有這樣做的以下差異:
cout << "a";
cout << 'a';
我正在學習C++,並有一個問題,我找不到答案。'a'和'a'有什麼區別?
一個char
常量(使用單引號)和一個字符串常量(帶雙引號)之間的區別是什麼?
我所有與char數組相關的搜索結果與std::string
。我是在'a'
和"a"
之間的差異之後。
會不會有這樣做的以下差異:
cout << "a";
cout << 'a';
'a'
是一個字符文字。它的類型爲char
,大多數系統的值爲97(字母爲a
的ASCII/Latin-1/Unicode編碼)。
"a"
是一個字符串文字。它的類型是const char[2]
,並且是指具有值'a'
和'\0'
的2個char
的數組。在大多數(但不是全部)上下文中,對"a"
的引用將被隱式轉換爲指向該字符串的第一個字符的指針。
兩個
cout << 'a';
和
cout << "a";
碰巧產生相同的輸出,但出於不同的原因。第一個打印單個字符值。第二個連續打印字符串的所有字符(除了終止'\0'
) - 這恰好是單個字符'a'
。
字符串文字可以是任意長的,例如"abcdefg"
。字符文字幾乎總是隻包含一個字符。 (你可以有多字符常量,如'ab'
,但它們的值是實現定義的,他們非常很少有用。)
(在C語言中,你並沒有問,'a'
是int
型,並且"a"
是char[2]
(no 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。
從技術上講,'「a」是2個字符...... – chris
@chris:哎呀,對吧。謝謝! – Ryan
最好避免使用printf/stdio.h作爲照亮C++問題的工具...! : -/ – HostileFork
單引號用於環繞字符文字。雙引號用於圍繞字符串(字符數組)文字。
許多接口,例如cout <<
,都可以接受。
單引號'a'
是char
類型的文字。雙引號"a"
是一個以NULL結尾的字符串文字char
s。 「
其中的情況下,「A」 1字節1字節 - >它是單個字符。所以它的大小將是1個字節。
char str[]="a";
或
char *ptr = "c";
for 'c' -> char c = 'a';
,或者我們可以寫出以及
char c = 97;
'A' - 1)字符常數 2)尺寸 - 1個字符 3)不是的集合字符數組
「a」-1)字符串文字 2)大小 - 2字符 3)字符數組的集合
嘗試放入多個字符並觀察差異。 – chris