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
[41819] Re:c문법 질문입니다.
신성기 [barmi] 776 읽음    2005-09-06 19:25
ssb 님이 쓰신 글 :
: typedef struct{
:   int a;
:   int b;
: }c;
:
: (unsigned long)&((c*)0)->b; //<-이게 의미하는게 b의 위치를 말하는거 같은데 이해가 잘 안되네요.
[1]  (c*)0   : 절대번지 0x000000을 강제적으로 "c의 포인터형"으로 형변환합니다.
[2]  ((c*)0)->b : 위에서 구한 "c의 포인터형"에서 멤버인 b을 찾아갑니다.
[3]  &(((c*)0)->b : 위에서 구한 b의 주소값을 가르킵니다.
[4]  (unsigned long)&((c*)0)->b : 위에서 구한 주소값을 unsigned long으로 형변환합니다.

이런 뜻이구요, 여기서 [2]에서 구한 b는 아무런 의미없는 값입니다. 단순히 절대번지 0에 c를 위치시킴으로써 상대적인 b의 주소값(위치)를 파악하고자 하는 겁니다.
이렇게 하는 이유는 변수를 따로 정의하지 않고, b의 위치를 구하기 위해서 입니다. 즉, 연산만 이루어 질 뿐, 실제 메모리를 소모하지 않는 다는 겁니다.

c c_value;
&(c_value.b) - &c_value;
이렇게 해도 되나, 이렇게 하면, c_value라는 인스턴스를 만들므로 메모리를 소모하게 됩니다.

참고하세요.

<끝>

+ -

관련 글 리스트
41813 c문법 질문입니다. ssb 735 2005/09/06
41824     Re:c문법 질문입니다. evergreen 862 2005/09/07
41827         Re:Re:c문법 질문입니다. 신성기 799 2005/09/07
41836             이곳이 국문학 공부하는 곳 도 아니고... 대충 넘어 갑시다. (냉무) evergreen 733 2005/09/07
41819     Re:c문법 질문입니다. 신성기 776 2005/09/06
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.