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
[65798] Re:이거이거 왜이런가요??? pointer와 double pointer요...
[] 955 읽음    2011-12-26 13:44
갈라파고스인 님이 쓰신 글 :
: 아래 그림과 같은 내용이요...
:
: *dptr이 왜 바뀌는 건가요???
: 그냥 책만 보면 ptr이 *dptr과 같아야 할것 같은데요...
:
: 정말 정말 궁금하네요... 물론 얕은 지식이라.... 모르는 것으로 보입니다만...
:
:
:

:

printf("ptr:%9p ptr:%lf dptr:%9p *dptr:%9p"); 로 해야 합니다.
다른 printf에서도 num, *ptr, **dptr은 모두 double 값이므로 %lf로 해야 합니다.
즉, printf의 포맷문자열에서 double 값에 대한 형식을 잘못 지정하셨습니다.

printf 함수를 호출할 때는 매개변수들을 스택에 차례대로 저장합니다.
스택에 저장할 때 앞의 매개변수를 낮은 번지에 저장하며 매개변수가 차지하는 메모리 공간은 호출시 지정한 매개변수들의 형을 보고 판단하는데 double 형은 8바이트고 포인터는 4바이트입니다.
그렇게 저장한 후 printf 함수로 실행점이 옮겨가면 함수 내에서는 포맷문자열을 앞에서부터 분석해가며 스택에 저장된 매개변수들을 가져다 쓰는데 가져올 때 매개변수의 크기는 포맷문자열에 지정한 형식을 기준으로 판단합니다. %p는 4바이트이고 %lf는 8바이트입니다.
호출 직전에 스택에 저장할 때의 매개변수 크기와 가져다 쓰는 매개변수 크기가 다르면 그 뒤의 매개변수들은 그 다른 차이만큼 밀리거나 당겨진 잘못된 위치에서 가져오게 되는 문제가 발생합니다.

위에서 자료형 자료형에 따른 크기는 32bit 환경에서입니다.

+ -

관련 글 리스트
65796 이거이거 왜이런가요??? pointer와 double pointer요... 갈라파고스인 1026 2011/12/26
65798     Re:이거이거 왜이런가요??? pointer와 double pointer요... 955 2011/12/26
65799         Re:Re:이거이거 왜이런가요??? pointer와 double pointer요... 갈라파고스인 839 2011/12/26
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.