|
님께서 원하는 답이 cout에 대한 것이 아니라고는 하지만
질문에서 나오는 현상은 cout 객체의 operator 정의 때문에
그런 결과가 나오는 것입니다.
char *(char pointer)의 경우에는
ostream_type& operator<<(basic_streambuf<char_type, traits> *sb);
의 정의에 따라서 문자열을 출력하게 되는 것이고
int *(int pointor)의 경우에는
ostream_type& operator<<(const void *p);
의 정의에 따라서 포인터값을 출력하게 됩니다.
int pointer가 void pointer로 casting이 되는겁니다.
참고하세요.
전승호 님이 쓰신 글 :
: 문자포인터와 숫자포인터의 차이점 질문이요.
: 책에서 예문을 공부하던 도중에 문자열 포인터에 대한 예문을
: 보았습니다.
: 그 중에서
: //문자열 포인터예문
: #include <iostream.h>
: void main()
: {
: char b[]="abcde";
: char *pb;
: pb=b;
: cout << "b[] = " << b << '\n';
: cout << "ba = " << pb+2 << '\n';
: }
: 의 문을 보았습니다.
: 그런데 이상한건
:
: //숫자형 포인터예문
: #include <iostream.h>
: void main()
: {
: int a[]={10,20,30,40,50};
: int *pa;
: pa=a;
: cout << "a[] = " << a << '\n';
: cout << "pa = " << (pa+2) << '\n';
: }
:
: 와 같은 경우에는 a를 숫자형 배열로 선언해놓고 a값을
: 숫자형포인터변수인 pa에 넣은다음 a와 (pa+2)를 출력
: 하면 물론 저의 예상대로 첫번째의 배열주소와 세번째의
: 배열주소가 찍히더군요.
: 그런데 이상하게 위의 문자열배열포인터 문장에서는
: b를 문자형 배열로 선언해놓고 b값을 문자형포인터변수인
: pb에 넣은다음 b와 pb를 출력하면 저의 생각엔 문자열배열
: b[0]의 주소와 그값을 넘겨받은 포인터변수 pb값도 b[0]의
: 주소가 찍힐것만 같았는데 이상하게 실제로는 저의 생각과
: 는 전혀 다르게 문자열이 모두 찍히더군요.
: 제가 원하는 답변은 cout객체에 관한 것이 아닙니다.
: 왜 숫자형에서는 배열의 이름을 출력하면 배열의 첫번쨰 요소의
: 주소가 출력되는데 char형에서는 무엇때문에 배열의 이름을 출력
: 하면 모든 배열의 문자가 출력되는가 입니다.
: 그리고 그뿐만이 아니라 pb+2같이 출력하면 abcde가 아니라
: cde가 찍히더군요.
: 이유가 궁금해요,
: 대충은 짐작이 가지만 정확히 알고 싶어요
: 꼭좀 지적해 주세요.
: 그럼
:
:
:
|