#include <iostream> using namespace std;
int main() { int a=100; int &r=a; printf("a : %d\n", sizeof(a));//4 printf("&r: %d\n", sizeof(&r));//4 printf("a : %08x\n", &a);//a의 주소 printf("&r: %08x\n", &r);//a와 똑같은 주소 cout << "a= " <<a <<endl;
r=400; cout << "a= " <<a <<endl;//400이 출력된다. 레퍼런스 &r은 a와 같은 주소를 지니므로 400이 된다. 여기서 중요한 점은 레퍼런스 변수는 a와 같은 주소를 지닌다. 즉, 메모리상 용량은 a변수 하나밖에 차지 하지 않는점이다.
예를 들어서, ex) int *p=&a; 는 포인터 변수의 주소 p가 따로 생성이 된고 &a의 주소를 가르키게 된다. 즉, a의 주소가 1000이라고 한다면, 포인터 자체의 주소는 2000번지가 된다. 다만, 값을 넣을 때 a의 주소를 따라가서 1000번지에 해당 값을 넣는다. 포인터 자체의 주소는 따로 가지고 있어서, 메모리상에서 공간을 4바이트 차지한다.
그러나 레퍼런스 변수는 주소자체가 a의 주소와 같다.

|