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 |