|
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 역시 포인터 형이 되어야 정상적으로 동작합니다.
|