2010. 7. 12. 22:56

#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
Posted by 어북어위크