자주 나오는 질문인 포인트 표현식
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;
형에 붙여서 씁니다.
갑자기 생각나서
쓰고 나니 이게 팁 같기도 하고 트럭 같기도... ㅡ,.ㅡ;;
|