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
[43639] Re:C++ 레퍼런스(&)관련해서 문법질문드림니다..^^
크레브 [kkol] 1069 읽음    2006-02-12 11:44
아돌님 질문을 보면
포인터와 레퍼런스에 대해 혼란을 느끼시는것 같습니다.

처음질문부터 답변하는것보다 핵심적인 소스부터 설명 드리죠

---------------------------------------------------------------------------
: 3   bool BCLCoGnrLmt::readVCLM34T(const IFWVO &vCLM34T)
:     {
:       VCLM34T &iVO = (VCLM34T &)vCLM34T;
:       select_CLM34T_1(&iVO.mv);
:     }
---------------------------------------------------------------------------


여기서 함수 매개변수의  readVCLM34T(const IFWVO &vCLM34T) 에서의
"&"는 레퍼런스로 값을 받겠다는 것이고요

:       select_CLM34T_1(&iVO.mv);

여기에서는의 "&"는 레퍼런스가 아니라 iVO.mv의 포인터를 나타내는겁니다.


따라서 4번 소스

---------------------------------------------------------------------------
: 4   short select_CLM34T_1( struct rclm34t_type* iCLM34T)
:     {
:      memcpy(&DCLM34T, iCLM34T, sizeof(DCLM34T));
:      select 어쩌구 저쩌구 from 어쩌구;
:     }
---------------------------------------------------------------------------

이 소스는 아돌님이 생각하는데로


---------------------------------------------------------------------------
: 아..그리고 그아래에 memcpy부분이요 iCLM34T 를 DCLM34T 로 카피하고있습니다..
: 그런대?무슨이유에서 포인트타입의 iCLM34T를 레퍼런스타입의 DCLM34T 로 넣게
: 된걸까요
---------------------------------------------------------------------------

포인트 타입에서 레퍼런스 타입으로 복사하는게 아니라 둘 다 포인터 타입입니다.
&DCLM34T 은 DCLM34T를 가리키는 포인터이기 때문입니다.

또한 4번 함수에서는 포인터로 받은것은 처음 개발하신분이 함수 내부에서
memcpy를 사용하기 위해 일부러 포인터로 받은 것으로 보이고요
물론 레퍼런스 타입으로 받아서 "&"를 붙여 사용해도 차이는 없을겁니다.

어떻게 사용해도 큰 차이는 없습니다.

"&" 를 사용하는 C문법에서는 변수의 메모리번지를 리턴 하는 기능으로만 사용했었는데..
C++ 문법으로 넘어가면서 레퍼런스 선언이라는 문법이 추가되어 혼란이 되는것 같군요

이것만 확실히 알아두시면 좋을듯...

C++에서 레퍼런스(&)를 사용하는것은 포인터를 보기좋게 사용하기 위한 방법일 뿐입니다.





아돌 님이 쓰신 글 :
: 안녕하세요^^
: 레퍼런스 선언에 대해 선배님들의 답변부탁드릴께요..
:
: 아래는 제가 보는 소스의 일부분을 붙여넣은것입니다..
: 1번소스 함수의 매개변수를 &iPVO로 받구요 이것을 다시 iVS1014S에 넣구요..
: iVS1014S에 들어간값중 일부를 가져와서 각각의 *pInVO와 *pOutVO에 넣었는대요..
: 대충이런식으로 어떤뜻인지는 알겠는대요..저 레퍼런스(&)이거에대해서 잘모르겠어요
:
: 제가 알기론 레퍼런스는 또다른이름을 짓는거라고 들은거같은대..도대체 레퍼런스가
: 무슨역할을하는것이며..무슨뜻인가요?선배님들의 좋은 조언부탁드릴께요..
: 아래의 1번 소스를 예로 설명부탁드림니다..(__)
:
: <1번 소스>
:
: short PS1014S::calcGnrLmt(IFWVO &iPVO)
: {
:     VS1014S &iVS1014S = (VS1014S &)iPVO;
:     VS1014I *pInVO  = iVS1014S.getInVO_1014();  
:     VS1014O *pOutVO = iVS1014S.getOutVO_1014();
: }
:
:
: 조금만 더 질문드릴께요..^^
:
: 아래 또다른 2번소스가 있습니다..1번에서 iVCLM34T를 선언하고 호출했습니다..
: 2번에서 호출값을 받았습니다 레퍼런스로요..이때 레퍼런스로 받았다면
: 그냥 일반적으로 받는거랑 어떤게 틀린가요?(질문1)
: 그리고 레퍼런스로 받은값을 또다른 레퍼런스 선언한곳인 iVO에 넣었어요..
: 이또한 레퍼런스 선언된변수로 인해 어떤특성이 있는지도 궁금합니다..(질문2)
: 계속해서 레퍼런스로 받았던 vCLM34T를가지고 3번인 readVCLM34T를 호출했습니다..
:
: 3번에서도 2번에서와같이 값을레퍼런스로 받고 또다른레퍼런스에 넣주고..
: 그리고 &iVO.mv를 가지고  호출을 또 합니다..여기서 mv는 클래스 내부에 선언된
: struct입니다..
:
: 이제 4번으로 호출이 됨니다 여기서는 레퍼런스를 넘겨줬는데 포인트로 받았습니다
: 여기서 포인트로 받은이유는 무었일까요?주소값이 포인트로 들어가는건가요?(질문3)
: 왜 레퍼런스만 쓰다가 포인터로 받았을까요..ㅠㅠ 어렵네요..
:
: 아..그리고 그아래에 memcpy부분이요 iCLM34T 를 DCLM34T 로 카피하고있습니다..
: 그런대?무슨이유에서 포인트타입의 iCLM34T를 레퍼런스타입의 DCLM34T 로 넣게
: 된걸까요..이렇게 되면 포인트의 주소가 레퍼런스로 들어가나요?내부적으로
: 어떤일이 이루어지는지 모르겠네요..ㅠㅠ답변부탁드릴께요..(질문4)
:
: <2번 소스>
:
:
: 1   VCLM34T iVCLM34T;
:      m_BCLGnrLmt->readVCLM34T(iVCLM34T)
:
: 2    bool BCLGnrLmt::readVCLM34T(const IFWVO &vCLM34T)
:     {
:       VCLM34T &iVO = (VCLM34T &)vCLM34T; 
:       m_BCLCoGnrLmt->readVCLM34T(vCLM34T)
:     }
:
: 3   bool BCLCoGnrLmt::readVCLM34T(const IFWVO &vCLM34T)
:     {
:       VCLM34T &iVO = (VCLM34T &)vCLM34T;
:       select_CLM34T_1(&iVO.mv);
:     }
:
: 4   short select_CLM34T_1( struct rclm34t_type* iCLM34T)
:     {
:      memcpy(&DCLM34T, iCLM34T, sizeof(DCLM34T));
:      select 어쩌구 저쩌구 from 어쩌구;
:     }
:
:
: 정말 길어졌네요..ㅠㅠ 근대 알고싶어요..
: 책을 뒤져봐도 잘모르겠구요..인터넷을 뒤져봐도 제가원하는 대답은 없구요..
: 이프로그램은 실제 업무에쓰이는 거에요..소스분석을 해야하는대 어렵네요..
: 정말 알고싶네요..어떤건인지..왜그런건지..무슨뜻인지..
:
: 선배님들..번거로우시겠지만 초보의 입장에서 이해하기 쉽도록 설명부탁드릴께요..
: 1번 소스,2번소스 에대해 답변부탁드림니다..
: 한시라도 빨리 알고싶을뿐이네요..
:
: 감사합니다..(__)

+ -

관련 글 리스트
43636 ` 럼포 806 2006/02/12
43639     Re:C++ 레퍼런스(&)관련해서 문법질문드림니다..^^ 크레브 1069 2006/02/12
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.