참조 변수의 주소를 얻을 수 있는지요.(c++)
글쓴이: battlexnwl / 작성시간: 목, 2013/03/07 - 9:40오후
참조형이 내부적으로는 포인터와 '동일한 동작'을 하고 있는 것으로 배웠습니다.
포인터의 경우에는
int *a = &tmp;
int *형의 변수인 a에 tmp의 주소를 담으므로, &a는 a의 주소를 반환하지요.
그런데 참조형은
int &a = tmp;
후에
cout << &a;
라는 코드는
cout << &tmp;
와 같으므로 tmp의 주소를 반환합니다.
'tmp의 별칭을 a라 하자'라는 선언도 메모리 어딘가에 적재를 해야 할 것 같습니다.
참조형이 포인터와 내부적으로 똑같은 과정을 거쳐 동작하는 것이 사실이라면 a라는 별칭을 사용할 수 있도록 하기 위해
메모리 어딘가에 그 내용을 저장을 했을 거란 생각이 들어서 그 주소를 눈으로 직접 확인해보고 싶습니다.(생각이 잘못되었는지도 궁금합니다.)
어떻게 해야하나요?
Forums:
'tmp의 별칭을 a라 하자'라는 선언도 메모리
'tmp의 별칭을 a라 하자'라는 선언도 메모리 어딘가에 적재를 해야 할 것 같습니다. << 그렇지 않습니다.
이부분은 컴파일 타임에 컴파일러가 레퍼런스를 없애고 자동으로 원래 변수로 변환시킬수 있기 때문에 런타임에 별도의 변수(메모리)를 필요로하지 않습니다.
단 함수의 인자로 레퍼런스를 넘기는 경우에는 인자에 레퍼런스 변수가 선언되므로 별개의 변수(메모리)가 필요하긴 한데, 이 변수는 실제로는 포인터를 통해서 구현됩니다.
C++의 레퍼런스는 쓰기 좋게 포장해놓은 신택스-슈거이며, 컴파일러가 컴파일 타임에 알아서 변환해주므로 실제 '레퍼런스 변수'라는 변수(메모리)는 존재하지 않습니다.
감사합니다.
당일 밤에 확인 했는데 댓글은 막상 늦었네요.:)
답변 감사합니다