Program Languege/C/C++

레퍼런스 변수

Frozen0113 2013. 2. 17. 20:16

레퍼런스 변수

 

레퍼런스 변수는 이미 선언된 변수를 다른 이름으로 부르는 변수이다. 레퍼런스 변수는 선언시 어떤 변수의 다른 이름이 될 지를 반드시 명시해야한다.(선언에서 레퍼런스 변수를 나타내는 기호인 주소지정 연산자&를 함께 표시해야한다)

 

Ex> int a = 0;

int &ref = a;     =>   자료형 &변수 이름 = 변수;

 

변수는 단 하나의 이름을 가진다고 했다. 우리도 하나의 이름을 가지듯이 하지만 별명은 여러개가 되듯 변수도 여러개의 별명을 가진다고 생각하면 쉽게 이해가 될 것이다. 예를 들어 철수가 있는데 철수의 별명이 개똥이, 골목대장, 1반 반장 등으로 불릴 수 있듯이 말이다.

 

하나의 변수에 여러개의 레퍼런스 변수를 붙여줄 수 있으며 선언시에 레퍼런스 변수를 통해 레퍼런스 변수를 선언할 수 있다.

 

- 소스 코드 예시

 

int a = 0;

int &ref1 = a;

int &ref2 = ref1;

 

 

 

 a, ref1, ref2

 

 

... 

... 

 0

... 

... 

 

위의 표처럼 메모리 공간에 지정된다고 볼 수 있다.

그럼 출력 값으로 볼 수 있게 주소를 보도록 하겠다.

 

- 소스 코드 예시

 

int a = 0;

int &ref1 = a;

int &ref2 = ref1;

 

cout << "a의 주소 : " << &a << endl;

cout << "ref1의 주소 : " << &ref1 << endl;

cout << "ref2의 주소 : " << &ref2 << endl;

 

 

 

 

동일한 주소를 갖는 것을 알 수 있다.

 

 

레퍼런스와 포인터의 차이점은 레퍼런스의 경우 같은 주소(같은 공간)을 가져서 바로 접근하기 때문에 직접 참조. 포인터의 경우 다른 주소(포인터 변수)에 주소 값을 가지고 있다가 주소 값을 통해 접근하기때문에 간접 참조라고 한다.

 

Ex>

 

int a = 0;

int &ref = a;

int *p = &a;

 

 

 p

 

 

 a, ref

 

 ....

0x002BFEE4

(a의 주소 값)

....

.... 

....

 ....

0x002ACCE3

.... 

.... 

 0x002BFEE4

....

 

 

 

 

 

- 출처 : 열혈강의 C++ 언어본색

※ 책을 보고 공부한 내용을 정리하였기때문에 내용이 책과 다를 수 있습니다.