2014-02-09 130 views
3

當我使用char指針指向單個char時,它似乎最終指向一個char數組。這裏怎麼回事?指向char數組而不是單個char的char指針?

#include <iostream> 
#include <map> 

using namespace std; 

int main() { 

    char first = 'a'; 
    char second = 'b'; 
    char third = 'c'; 

    map<char, char *> myMap; 

    myMap['a'] = &first; 
    myMap['b'] = &second; 
    myMap['c'] = &third; 

    cout << myMap['a'] << endl; // ends up printing 'abc' or 'cba' 

    system("pause"); 
    return 0;  
} 
+4

如果這種情況沒有發生,'性病::法院<< 「!你好,世界\ n」;'將打印'H',這對於初學者來說可能會造成混亂。 – chris

+2

如果你將'char *'傳遞給'iostream',它就認爲它是一個C風格的字符串。 –

+1

@chris實際上,它會打印類似於'0x4f72b6d4'的東西 - 那麼它就沒有任何理由去取消指針了。 – Angew

回答

6

operator<<過載char*需要一個指向字符的空字符結尾的陣列,以便它知道在串結束。恰巧你的char變量在內存中是連續分配的,並且它們後面有一個0字節。該代碼儘管調用未定義的行爲。

要打印單個字符,取消引用指針:

cout << *myMap['a'] << endl; 
+0

謝謝你保存我的理智。 – jonathanpaul