C++Builder Programming Forum
C++Builder  |  Delphi  |  FireMonkey  |  C/C++  |  Free Pascal  |  Firebird
볼랜드포럼 BorlandForum
 경고! 게시물 작성자의 사전 허락없는 메일주소 추출행위 절대 금지
C++빌더 포럼
Q & A
FAQ
팁&트릭
강좌/문서
자료실
컴포넌트/라이브러리
메신저 프로젝트
볼랜드포럼 홈
헤드라인 뉴스
IT 뉴스
공지사항
자유게시판
해피 브레이크
공동 프로젝트
구인/구직
회원 장터
건의사항
운영진 게시판
회원 메뉴
북마크
볼랜드포럼 광고 모집

C++빌더 Q&A
C++Builder Programming Q&A
[6056] Re:문자포인터와 숫자포인터의 차이점 질문이요
한꼬맹이 [] 2559 읽음    2001-03-12 22:55
전승호 님이 쓰신 글 :
: 문자포인터와 숫자포인터의 차이점 질문이요.
: 책에서 예문을 공부하던 도중에 문자열 포인터에 대한 예문을
: 보았습니다.
: 그 중에서
: //문자열 포인터예문
: #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가 찍히죠...

그럼 참고하시길...

+ -

관련 글 리스트
6047 문자포인터와 숫자포인터의 차이점 질문이요 전승호 2616 2001/03/12
6058     Re:문자포인터와 숫자포인터의 차이점 질문이요 박세용 2369 2001/03/12
6056     Re:문자포인터와 숫자포인터의 차이점 질문이요 한꼬맹이 2559 2001/03/12
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.