포인터와 레퍼런스

포인터는 변수이기 때문에 중간에 다른 변수의 주소값으로 갈아탈 수 있다. 레퍼런스는 선언 시 어느 변수의 별명이 될지 지정하고 한번 별명이 되면 절대로 다른 이의 별명이 될 수 없다.

포인터변수는 값을 변경할 때 *pa로 해야한다 레퍼런스는 값을 변경할 때 refa로 앞에 &나 *을 붙이지 않아도 된다.


레퍼런스의 레퍼런스

레퍼런스의 레퍼런스도 정의할 수 있다. 그렇게 될 경우 원본을 포함해 3개의 값은 모두 동일한 변화를 가진다. 다만 참조자의 참조자는 실제로 참조자를 참조하는 것이 아닌 원본을 두개의 참조자가 참조하고 있는 의미가 된다.

int x;
int& y = x;
int& z = y;
//z는 y의 참조자가 아닌 x의 참조가 된다는 뜻이다

상수와 리터럴의 레퍼런스

상수 값, 리터럴을 참조하는 것은 일반적으로 불가능하다. 다만 const를 이용해 상수 참조자로 레퍼런스를 선언하면 리터럴도 참조할 수 있다.

const int &ref = 4;
int a = ref;		// a = 4

레퍼런스의 배열

레퍼런스의 배열은 불가능하다 레퍼런스는 메모리 상에 공간을 차지하지 않기 때문에 배열로 정의할 수 없다

int a, b;
int& arr[2] = {a, b};