2014-02-09 4 views
3

char 포인터를 사용하여 단일 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

이 <<,'표준 : : cout을 발생하지 않은 경우! "안녕하세요, 세계 \ n";'인쇄 할 것'H'를, 그것은 초보자들에게는 대단한 혼란을 줄 것입니다. – chris

+2

'char *'를'iostream'에 건네면, C 스타일의 문자열이라고 가정합니다. –

+1

@chris 사실,'0x4f72b6d4'와 같은 것을 출력 할 것입니다. 포인터를 derefernce 할 이유가 하나도 없습니다. – Angew

답변

6

operator<< 과부하 문자의 널 종료 배열에 대한 포인터를 기대하고있다. 단지 char 변수가 연속적으로 메모리에 할당되었고 그 뒤에 0 바이트가옵니다. 코드는 정의되지 않은 동작을 호출합니다.

포인터 역 참조, 하나의 문자를 인쇄하려면 :

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

제 정신을 살려줘서 고맙습니다. – jonathanpaul