Notice
Recent Posts
Recent Comments
«   2024/12   »
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31
Archives
Today
Total
관리 메뉴

SYDev

C++ Chapter 02-3 : 참조자(Reference) 본문

Programming Lang/C++

C++ Chapter 02-3 : 참조자(Reference)

시데브 2023. 7. 6. 14:02

참조자(Reference)

 참조자는 자신이 참조하는 변수를 대신할 수 있는 또 하나의 새로운 이름이다. 참조자의 선언 방법은 다음과 같다.

int num1 = 20; // num1이 초기화되지 않은 상태로 참조자를 선언할 시에 compile error 발생
int &num2=num1 //num2가 새로 선언된 변수일 시에 num2가 참조자로 선언된다.

 

 

 그렇다면 다음 예제를 살펴보자.

#include <iostream>
using namespace std;

int main(void)
{
    int num1 =1024;
    int &num2 = num1;

    num2 = 2048;
    cout<<num1<<endl;
    cout<<num2<<endl;

    cout<<&num1<<endl;
    cout<<&num2<<endl;

    return 0; 
}
2048
2048
0x61fe14
0x61fe14

 위 예제를 통해서 해당 변수의 참조자와 변수는 이름을 제외하고 같다는 것을 알 수 있다.

 

 또한, 참조자 생성 수에는 제한이 없고 참조자를 대상으로 참조자를 만들 수 있다.

int num1 = 2048;
int &num2 = num1;
int &num3 = num1;
int &num4 = num1;
int num1 = 2048;
int &num2 = num1;
int &num3 = num2;
int &num4 = num3;

 

참조자(Reference)의 선언 가능 범위

 참조자는 선언과 동시에 초기화되어야 한다. 이외에도 참조자 선언의 특징에 대해 살펴보자.

const int num = 20;

int &ref = 20; //compile error, 참조자는 변수에 대해서만 선언 가능
int &ref; //compile error, 참조자는 선언됨과 동시에 누군가 참조해야 함
int &ref = num; //compile error, 참조자는 상수 대상으로 선언 불가능
int &ref = NULL; //compile error, 참조자는 선언과 동시에 NULL로 초기화 불가능

 아래 예제를 살펴보자.

#include <iostream>
using namespace std;

int main(void)
{
    int arr[3]={1, 3, 5};
    int &ref1 = arr[0];
    int &ref2 = arr[1];
    int &ref3 = arr[2];

    cout<<ref1<<endl;
    cout<<ref2<<endl;
    cout<<ref3<<endl;

    return 0;
}
1
3
5

 위 예제처럼  배열 요소는 변수로 간주되어 참조자 선언이 가능하다.

 

 아래 예제를 살펴보자.

#include <iostream>
using namespace std;

int main(void)
{
    int num = 12;
    int *ptr = &num;
    int **dptr = &ptr;

    int &ref = num;
    int *(&pref) = ptr;
    int **(&dpref) = dptr;

    cout<<ref<<endl;
    cout<<*pref<<endl;
    cout<<**dpref<<endl;

    return 0;
}
12
12
12

 위와 같이 참조자는 포인터 변수를 대상으로도 선언이 가능하다.

 


출처 : 윤성우, <윤성우의 열혈 C++ 프로그래밍>, 오렌지미디어, 2010.05.12