c++ cout 관련 질문

조회수 508회

안녕하세요 c++ 공부중인 학생입니다.

c++ 공부중에 이상한 점이 있어서 문의드립니다.

==================

char c = 'a';

char *d = &c;

cout << d << endl;

printf("%p\n",d);

===================

위와같이 하였을경우 두 경우 모드 c의 주소값이 출력 되는 것으로 알고있습니다.

하지만 cout의 경우에 계속 주소값이 아닌 계속 이상한 값이 출력이 되는데 왜그런지 알고싶습니다.

  • (•́ ✖ •̀)
    알 수 없는 사용자

1 답변

  • printf 로는 형식을 %p 즉 명시적으로 주소를 출력하도록 설정했습니다.

    cout 에서는 주소가 아닌 변수 결과를 출력하고 있습니다.

    이상한 값이 출력이 되는 이유는 다른 타입과 달리 char* 는 조금 특이합니다. char* 은 문자열의 정의이기도 한데 문자열 정의의 끝은 null 문자로 하게 되어 있습니다. 즉 null 문자전까지가 하나의 문자열이다라고 인지를 하기 때문에 이상한 값이 함께 즉 null 이 나타날때까지 출력되는 겁니다.

    이 부분은 그냥 외우세요. char* 은 int* 하고는 다르다. char* 는 문자열을 표현해야 하고 문자열의 끝은 null 문자까지다. 또한 변수명은 주소가 아닌 문자열 값을 나타낸다.

    즉 cout << d 를 하면 비록 한문자만 대입했지만 null 문자가 나올때까지 출력하게 되는 겁니다. 하나의 문자만 출력하고 싶다면 d[0] 과 같이 명시적으로 표현해야 합니다.

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)