참조 변수 (Reference Variable)
- 참조 변수는 C++에서 새로 추가된 변수이다.
- 변수의 또 다른 이름으로서 사용 한다.
- 내부적으로 포인터와 동일하게 동작 한다.
- 포인터처럼 동작하지만, 포인터 문법이 아닌 일반 변수의 문법을 사용 한다.
- & 기호를 사용하여 선언 한다.
#include <iostream>
int main()
{
int num = 42;
int* numPTR = #
int& numREF = num;
std::cout << &num << std::endl;
std::cout << numPTR << std::endl;
std::cout << &numREF << std::endl;
std::cout << num << std::endl;
std::cout << *numPTR << std::endl;
std::cout << numREF << std::endl;
return 0;
}
- 아래 사진은 참조, 포인터의 선언 및 사용에 대한 디스어셈블리 결과이다.
- 참조와 포인터의 내부 동작이 동일한 것을 확인할 수 있다.
참조와 포인터의 차이
- 편의성
- 참조 : 일반 변수처럼 사용 한다.
- 포인터 : 포인터 전용 문법(’→’, ‘*’)을 사용 한다.
- 초기화
- 참조 : 선언과 동시에 초기화가 필수 이다.
- 포인터 : 초기화가 필수는 아니다.
- NULL 포인터 사용
- 참조 : NULL 포인터를 값으로 가질 수 없다.
- 포인터 : NULL 포인터를 값으로 가질 수 있다.
- 재할당
- 참조 : 다른 변수로 재할당이 불가능 하다. (const 처럼)
- 포인터 : 다른 변수의 주소로 값 변경이 가능 하다.