2012-07-01 361 views
4

我正在學習C++,並有一個問題,我找不到答案。'a'和'a'有什麼區別?

一個char常量(使用單引號)和一個字符串常量(帶雙引號)之間的區別是什麼?

我所有與char數組相關的搜索結果與std::string。我是在'a'"a"之間的差異之後。

會不會有這樣做的以下差異:

cout << "a"; 
cout << 'a'; 
+0

嘗試放入多個字符並觀察差異。 – chris

回答

18

'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))類型。

+0

謝謝,是與#include 包含的類型相同的字符串文字? – james

+0

@james,不,後者是封裝前者的類,使用起來更容易。 – chris

+2

@james:不,字符串文字的類型爲'const char []',但''定義了一個'std :: string'類型。 C++從C繼承了字符串文字; 'std :: string'特定於C++。 –

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

+1

從技術上講,'「a」是2個字符...... – chris

+0

@chris:哎呀,對吧。謝謝! – Ryan

+1

最好避免使用printf/stdio.h作爲照亮C++問題的工具...! : -/ – HostileFork

1

單引號用於環繞字符文字。雙引號用於圍繞字符串(字符數組)文字。

許多接口,例如cout <<,都可以接受。

0

單引號'a'char類型的文字。雙引號"a"是一個以NULL結尾的字符串文字char s。 「

0
  • 」a「 - >它表示它是一個字符串。在C++中字符串是 字符數組的集合。
  • 所以字符串以定界符'\ 0'結尾,它表示字符串的結尾。
  • 所以其大小將是2,因爲對於「一」和關於「\ 0」

其中的情況下,「A」 1字節1字節 - >它是單個字符。所以它的大小將是1個字節。

char str[]="a"; 

char *ptr = "c"; 

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

,或者我們可以寫出以及

char c = 97; 
-1

'A' - 1)字符常數 2)尺寸 - 1個字符 3)不是的集合字符數組

「a」-1)字符串文字 2)大小 - 2字符 3)字符數組的集合

相關問題