|
전승호 님이 쓰신 글 :
: 문자포인터와 숫자포인터의 차이점 질문이요.
: 책에서 예문을 공부하던 도중에 문자열 포인터에 대한 예문을
: 보았습니다.
: 그 중에서
: //문자열 포인터예문
: #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가 찍히더군요.
: 이유가 궁금해요,
: 대충은 짐작이 가지만 정확히 알고 싶어요
: 꼭좀 지적해 주세요.
: 그럼
:
:
:
안녕하십니까?
한꼬맹이 입니다..
간단히 말해서 문자열은 그자체가 주소가 됩니다.
그래서 스트링 배열첨자값 하나하나는 문자이고 스트링그자체가 주소이므로
스트링 포인트를 찍으면 당연히 문자열이 찍힙니다.
그리고 pb+2가 cde가 찍히는 이유는 주소를 2바이트 증가 시켰기 때문이죠..
현재위치: # #
주 소: 12345 12345
스 트 링: abcde abcde
pb일때 주소 1을 가리키고 pb+2일때 주소 3을 가리키죠 그러니까 3부터 끝까지 찍으니까
cde가 찍히죠...
그럼 참고하시길...
|