#include <iostream>
using namespace std;
void main()
{
int n = 10;
int* p = &n;
int& r = n;
++r;
cout << n << endl;
cout << &n << endl;
cout << &r << endl;
// int& r1; //Error
// 기존 변수에 대한 또 다른 이름(별명)을 제공한다.
// 동일한 메모리 영역을 공유한다.
// 반드시 선언과 동시에 초기화 되어야 한다.
}
// 1. 포인터에 대한 레퍼런스는 만들 수 있으나 레퍼런스에 대한 포인터는 만들 수 없다.
void main()
{
int n = 10;
int* p = &n;
int& r = n;
int*& rp = p; // 포인터의 레퍼런스.
cout << *rp << endl;
int&* pr = &r; // Error 레퍼런스를 가르키는 포인터 변수.
}
// 2. 함수, 배열 이름데 대한 레퍼런스를 만들 수 있다. 하지만 레퍼 런스의 배열을 만들 수 없다.
int square(int x){return x * y;}
void main()
{
int ar[3];
int (&r_ar)[3] = ar; // 배열의 레퍼런스.
int (&r_f)(int) = square; // 함수의 레퍼런스.
r_ar[0] = 2;
cout << r_f(ar[0]) << endl;
int& arr[3]; // Error 레퍼런스 배열.
}
// 3. 변수가 아닌 상수에 대한 레퍼런스를 만드는 것도 가능하다.
void main()
{
int& r1 = 10; //Error.
const int& r2 = 10; // OK.
int n = 10;
const int& r3 = n;
++n; // OK.
++r3; // Error.
}
'Programming > C++' 카테고리의 다른 글
| Call By Reference (0) | 2010.07.12 |
|---|---|
| Namespace (0) | 2010.07.12 |
| * Inline Function (0) | 2009.11.20 |
| * Overloading 된 함수 찾는 순서 (0) | 2009.11.19 |
| * Function Overloding (0) | 2009.11.19 |