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

C/C++ Q/A
[3164] Re:Re:Re:Re: 이해가 잘...
김광수 [] 1140 읽음    2004-01-10 23:37
아..내..답변고맙습니다.포인터에 대한 기본개념이군요.^^
제가 질문을 정확히 하지 못한거 같군요..

제가 첨에 올려드림 소스 컴파일해보시면 에러없이 잘 돌아갑니다.

그리고
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));
}



+ -

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