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

C/C++ Q/A
[3163] Re:Re:Re: 이해가 잘...
Starlet [starlet5] 1422 읽음    2004-01-10 22:35
00000000  10
00000004  20
00000008  mex[0]
00000009  mex[1]
0000000A  mex[2]
   .
   .


메모리 0x00000000부터 위와 같이 기록되어 있다고 가정합시다.

tag_param *wndparam;

이렇게 정의하면 wndparam은 주소형식(포인터)이 되죠?
wndparam = (tag_param *) 0x00000000;
이렇게 하면 wndparam에 0x00000000 이 들어가게됩니다. wndparam이 0x00000000을 가리키게 했으니 이제 메모리 0x00000000을 wndparam을 이용해 읽어볼까요?
printf("%d %d", wndparam->x, wndparam->y);
이렇게 하면 x와 y에 해당하는 10 20 이 출력됩니다. tag_param을 눈금이 그려진 투명한 판이라고 생각하고 위 메모리0x00000000 에 올려놓으면 매치되게 나오죠.

이상 포인터에 대한 설명이었고 소스를 다시보니 wndparam=*((tag_param *)(cs.y)) 에서 제일 앞에 있는 *도 빠져야 되는군요. wndparam은 포인터형이 되어야하고... 그럼 결국 wndparam = (tag_param *) cs.y; 가 되는데 제가 소스의 의도를 잘 이해하지를 못해 제대로 답변을 못해드리겠습니다. 제가 보기에는 tag_ccc로 정의된 구조체를 다시 tag_param으로 읽으들이는것 같은데 맞는지 모르겠군요. 그래서 일단 포인터에 대한 간단한 설명한 남깁니다.^^;;

김광수 님이 쓰신 글 :
: 아래 부분 좀 더 쉽게 설명해주시면 고맙겟내요
:
:
: 여기에서는 cs.y에 해당하는 integer값을 (tag_param *)으로 형변환을 합니다. (tag_param *)에서 중요한건 * 즉, 포인터입니다. cs.y에 5가 들어있다면 (tag_param *)(cs.y)의 의미는 메모리 주소 0x00000005부터 기록된 tag_param 형식으로 저장되어 있는 데이터를 가리킵니다. 따라서 wndparam=*((tag_param *)(cs.y)) 는 메모리에서 cs.y위치에 있는 데이터를 tag_param 구조체인 wndparam에 매치시키는것입니다. 단, 여기서 wndparam 역시 포인터 형이 되어야 정상적으로 동작합니다.

+ -

관련 글 리스트
3160 C언어 문법 질문(고수님 필독( 김광수 1562 2004/01/10
3161     Re:C언어 문법 질문(고수님 필독( Starlet 1521 2004/01/10
3162         Re:Re: 이해가 잘... 김광수 1383 2004/01/10
3163             Re:Re:Re: 이해가 잘... Starlet 1422 2004/01/10
3164                 Re:Re:Re:Re: 이해가 잘... 김광수 1343 2004/01/10
3170                     Re:Re:Re:Re:Re: 이해가 잘... Starlet 1445 2004/01/13
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.