본문 바로가기
c++

[C++]참조자(Reference)의 이해

by goblin- 2023. 1. 26.
참조자

참조자(Reference)란 할당된 하나의 메모리 공간(변수)에 둘 이상의 이름을 부여할 경우 이를 참조자라고 한다.

참조자를 선언하는 방법은 다음과 같다

int num1=2023
int &num2=num1;

먼저 num1이라는 변수를 선언한 후 할당된 메모리 공간에 2023이 저장되어 있다. 그다음 두 번째 줄 int &num2=num1; 이 참조자를 선언하는 코드이다. 참조자를 선언하게 되면 2023이 저장되어 있는 할당된 메모리공간의 이름이 num2가 추가된다.

 

참조자의 수에는 제한이 없으며 참조자를 대상으로도 참조자를 선언할 수 있다. 또한 참조자는 변수에 대해서만 선언이 가능하고, 선언됨과 동시에 누군가를 참조해야만 한다.

int num1=2023;
int &num2=num1;		//참조자를 선언한 후 바로 num1을 참조했다.
int &num3=num1;		//참조자를 선언한 후 바로 num2을 참조했다.
int &num4=num1;		//참조자를 선언한 후 바로 num3을 참조했다.

 

배열에서의 참조자 선언도 가능하다.
#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

 

여기서 참조자 선언과 포인터 변수 선언과 혼동이 생길 수 있어 잠깐 살펴보겠다.

int *ptr=&num1;		//변수 num1의 주소 값을 반환해서 포인터 ptr에 저장해라
int &num2=num1;		//변수 num1에 대한 참조자 num2를 선언해라

첫 번째 줄은 포인터 num1의 주소값을 포인터 ptr에 저장한 것이고

두 번째 줄은 변수 num1에 대한 참조자 num2를 선언한 것이다. 둘을 잘 구분해야 할 필요가 있다.

 

 

할당된 메모리 공간인 변수에 두 개 이상의 이름을 붙여줄 경우(별명) 이것을 참조자(Reference)라 하며 두 개 이상의 참조자를 붙일 수 있고 선언됨과 동시에 누군가를 참조해야만 한다.