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] 과 같이 명시적으로 표현해야 합니다.
댓글 입력