[C++] 참조(레퍼런스)와 포인터의 차이

junpkim·2022년 7월 20일
0

포인터는 주소값을 가리키는 것이고, 참조는 변수 그 자체를 불러온다.

int a = 10;
int &ref = a;
int *pointer = &a;

포인터를 사용할 때 변수명 앞에 *을 붙이는 것처럼 참조형 변수를 사용할 때는 &를 붙인다.
포인터는 주소값을 가리키기 때문에 어떠한 변수를 가리키기 위해서는 그 변수의 주소값을 넣어주어야 하지만 참조는 그냥 변수를 대입해주면 된다.
예를 들어 메모리 영역 0x00000042를 int a에 할당하고 10을 저장했다고 하면, pointer 변수는 0x00000046에 할당되고, 0x00000042가 저장되어 있을 것이다. 하지만 참조변수 ref는 별도의 메모리 영역을 사용하지 않고 0x00000042에 그대로 할당된다.
a라는 변수를 ref로도 부를 수 있도록 해준다.

void f(int &n)
{
	n = 10;
}
int main()
{
	int a = 20;
    f(a);
    cout << a << endl;
}

위 코드를 실행해보면 10이 출력된다.
함수의 매개변수를 참조형 변수로 지정했기 때문에 함수에서는 들어온 매개변수의 주소에 바로 접근할 수 있게되는 것이다.

이렇게 매개변수를 참조형 변수로 지정하는 것은 메모리상에서 큰 이점을 갖는데, 그냥 변수로 넘겨줄 경우에는 변수의 값을 복사하여 새로운 메모리를 할당하고 넘겨주게 된다. 하지만 참조형 변수로 넘겨줄 경우에는 별도의 작업 없이 함수에서 해당 변수를 사용할 수 있도록 해준다.

0개의 댓글