본문 바로가기
프로그래밍/C++

레퍼런스(Reference)

by 리뷰하는 (게임)프로그래머_리프TV 2010. 3. 18.




C++에서 추가된 기능으로 주소값을 넘겨주는 &연산자를 변수 선언시에 사용함으로써,

같은 메모리 공간을 사용하는 2개의 변수( 1개의 변수와 그 변수의 별칭 정도가 더 맞는 표현일지도 모르겠다)를 말한다.

같은 값을 가르킨다는 것에서 포인터와 비슷하다고 할 수도 있지만 그 개념은 조금 다르다.

레퍼런스 설정 방법

#include <iostream>

void main()
{
	int n1 = 10;
	int &a = n1;	
}





디버그 화면을 보면 알 수 있지만

포인터처럼 *a의 값이 10이 아니다

그냥 a자체가 10을 가지고 있다는 것이 포인터와 다른 점이라고 할 수 있겠다.

실제로 &사용해서 값을 받으면

int n1 = 10;
int a; 를 사용하나
int &a = n1;

실제 사용할때는 int a 나 int& a 나 차이가 없다는 것이다.

내가 봤을땐 포인터가 할 수 있는 일은 레퍼런스도 할 수 있고

레퍼런스가 할 수 있는 일은 포인터도 할 수 있는데,

구지 나눠서 써야 하는가? 하는 생각도 들긴 하지만,,,

그건 좀 더 생각해 봐야할 일인거 같고.

레퍼런스에 대해서 몇가지만 더 집어보고 넘어가자.

#include <iostream>

void main()
{
	int *ap = 0;	// 포인터에 값을 넣는 것은 문제가 되지 않으나
	int &ar = 0;	// 레퍼런스는 값을 가질 수 없다.
	const int& ca = 123;	// 하지만 const 키워드를 사용하면 가능하다.
}

 

#include <iostream>

void main()
{
	int arr[3];	// 1차원 배열에 대해서 레퍼런스를 지정하고 싶다면
	int (&arr_r)[3] = arr;	// 다음과 같이 하면 된다.

	int *pArr[3];	// 1차원 포인터 배열에 대한 레퍼런스
	int *(&pArr_r)[3] = pArr;	// 이처럼 선언

	int val = 10;
	int *p = &val;	// val 주소값을 가지고 있는 p
	int *&pr = p;	// 포인터p의 레퍼런스 pr
	int **pp = p;	// 포인터p의 주소를 가지는 pp
	int **&ppr = pp;	// 포인터 pp의 레퍼런스를 가지는 ppr
}


이정도면 충분할 듯.

'프로그래밍 > C++' 카테고리의 다른 글

클래스의 활용  (0) 2010.03.20
class(클래스) ~ C++의 꽃 ~  (0) 2010.03.19
new & delete  (0) 2010.03.17
const 상수화  (0) 2010.03.17
namespace(이름 공간)  (0) 2010.03.15