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

C++빌더 팁&트릭
C++Builder Programming Tip&Tricks
[666] 별은 어디로 가야 하는 것일까요?
김태선 [cppbuilder] 6895 읽음    2007-07-02 21:04
자주 나오는 질문인 포인트 표현식

int  *ptr;  // 1번
int*  ptr;  // 2번

어느 것이 옳을까요?
이 문제에 해답을 얻기 위해 다음을 볼까요?

int  &ptr;  // 3번
int&  ptr;  // 4번

이건 어느게 옳을까요?
사실 컴파일러는 어느 것이나 같이 해석합니다.
문제는 언어적인  정의에 비추어 어느 쪽이 원래의 의미에 적합한 것인가 하는 것입니다.

3,4번 중에서 어느 것이 옳으냐는 거의 대부분의 사람들이 4번을 선택합니다.
3번은 C언어의 &ptr; 변수의 번지를 얻는 식과 구분이 안되기 때문입니다.
본래의 정확한 의미는 정수 레퍼런스형 변수라는 것이지 정수형 레퍼런스변수라는 것은 인간적인 표현의 편의일 뿐입니다.

3,4번의 경우는 헷갈려하는 사람이 거의 없는데,
1,2의 경우는 많이들 헷갈려 합니다.
이는 전통적으로
C언어에서 포인트를 1번과 같이 표현한데 따른 것입니다.
즉 C언어에서는 1번이 정석입니다.

하지만 C++에서 2번이 정석입니다.
왜냐하면 C++은 C언어를 단순히 업글한 언어가 아니라,
객체지향적인 관점에서 언어가 설계되고 개선되었기 때문입니다.

그러므로  1,2번의 C++식 표현은
(정수)포인트형 변수 ptr 인데,
이는 과거 C언어식의 1번에 대한 표현인 (정수형) 변수 포인트 ptr 과 완전히 대비됩니다.
C++에서는 단순히 변수라는 관점이 아닌 그보다 더 근원적인 객체라는 차원에서 보고 있고,
C에서는 변수라는 차원에서 다만 그 쓰임이 포인트라는 뜻이므로, 사실 이 둘간에는
좀 차이가 있습니다.

객체를 우선으로 하는 C++에서는 포인트의 표현은 형에 붙이거나,
아예 포인트형  변수를 typedef 같은 것으로 선언해서 사용하는 것이 일반적입니다.

별(포인트:에스트리크)을 어디에 두어야 할 것인지 더이상 헷갈리지 맙시다.
많은 C++ 플머들이 별 붙이는 곳이 제각기인 경우가 많더군요.
저도 그랬습니다만...

결론은 간단합니다.
C++에서는 별은 형에 붙인다 입니다.

레퍼런스형을
int  Ptr;
int& ptr = Ptr;
형에 붙여서 쓰듯이
포인트도
int* _ptr = &ptr;
형에 붙여서 씁니다.



갑자기 생각나서
쓰고 나니 이게 팁 같기도 하고 트럭 같기도... ㅡ,.ㅡ;;
안명호.ASURADA [asurada]   2007-07-03 08:29 X
int* a, b; 는 어떻게 해석 될까요?
김태선 [cppbuilder]   2007-07-03 09:05 X
이건 서로 다른 형에 대한 것이므로,
int* a;
int b;
라고 쓰는게 바람직 하겠죠.
기존 C를 C++에서 컴파일하게 수용하려니 좀 어색한 상황도 있는데 쓰는 사람이 지혜롭게 써야죠..
김태선 [cppbuilder]   2007-07-03 15:08 X
굳이 C 스타일로 코딩해도 사실, 별다른 문제가 될 것은 없습니다.
그냥 한번 생각해보자는 취지입니다.
이정구 [appleii]   2007-07-03 20:25 X
C 시절부터 잘못된 표기법을 C++ 이 그대로 계승하다보니 문제가 계속 이어지는 것 같습니다. 제가 C를 개발했다면 int *a; 대신에 *int a; 를 사용했을 것입니다. 이렇게 하면 해석하느라 고생할 필요가 없죠. Pointer 라면 뭔가를 가리키는 느낌이 나니까 의미를 확실하게 하기 위해서 >int a;  라고 했으면 더 좋았을 것 같습니다.

+ -

관련 글 리스트
666 별은 어디로 가야 하는 것일까요? 김태선 6895 2007/07/02
Google
Copyright © 1999-2015, borlandforum.com. All right reserved.