아..내..답변고맙습니다.포인터에 대한 기본개념이군요.^^
제가 질문을 정확히 하지 못한거 같군요..
제가 첨에 올려드림 소스 컴파일해보시면 에러없이 잘 돌아갑니다.
그리고
wndparam=*((tag_param *)(cs.y));
님께서 답변하신걸 토대로 보면
다시 질문드리자면,,
wndparam=*((tag_param *)(cs.y));
여기서 cs.y에 저장된 곳을 주소형식으로 형변환하자나요(tag_param *)
포인터가 있으니까 포인터형으로 바꺼준거겟조..
근대 원본소스 보시면 wndparam은 단지
tag_param wndparam으로 된 그냥 구조체변수일뿐이지 포인터변수가 아니자나요..
만약 tag_param *wndparam 으로 선언되어있었다면
님 말씀대로
wndparam=((tag_param *)cs.y; //이렇게 * 를 하나 뺏을 겁니다.
물론 이렇게 바꺼서 컴파일해봐도 애러없이 잘 컴파일 되더군요. 님 말씀이 맞았습니다.
하지만 문제는
단시 tag_param wndparam으로 변수선언이 되어있는대
wndparam=(tag_param)cs.y;
왜 이렇게 할수가 없느냐는 겁니다.
wndparam이 포인터변수였다면 당연히 위에 처럼
wndparam=(tag_param *)cs.y; 이렇게 했고
당연히 이번엔 wndparam이 그냥 변수니까
wndparam=(tag_param)cs.y;이렇게 하는게 맞지 않느냐는 겁니다
왜 *를 두개나 가따 붙여야 하는거냐 이말입니다
그러니까
tag_param wndparam ; 이렇게 선언될때
wndparam=*((tag_param *)(cs.y));
나
wndparam=(tag_param)cs.y;
나
같은 뜻인대 왜 전자는 컴파일이 잘되구 후자는 에러가 나느냐는 겁니다.
이게 저의 질문입니다..
#include<stdio.h>
struct tag_param{
int x;
int y;
char mex[11];
};
struct tag_ccc{
int *x;
int y;
char mex[11];
};
void main()
{
tag_ccc cs;
tag_param wndparam;
wndparam=*((tag_param *)(cs.y));
}
|