본문 바로가기

C++

[C++] 참조자(Reference)

C++에는 참조자라는 것이 있습니다. 참조자 형식은 C언어의 포인터와 비슷한 형식을 가집니다.

 

상수에는 포인터를 선언할 수 없는 것처럼 참조도 선언할 수 없습니다.

 

#include <iostream>
using namespace std;

int main()
{
	int num = 10;
	int& ref = num;		//참조자 선언
	int* ptr = &num;	//포인터 선언
	
	ref = 100;
	cout << num << endl;

	*ptr = 1000;
	cout << num << endl;

	cout << "num주소 : " << &num << endl;
	cout << "ref주소 : " << &ref << endl;
	cout << "ptr주소 : " << &ptr << endl;

	return 0;
}

 

결과값:

100
1000
num주소 : 0096FB08
ref주소 : 0096FB08
ptr주소 : 0096FAF0

 

참조자는 포인터를 쓰는 것과 비슷해 보인다. 참조자와 포인터의 차이점은 참조자는 주소가 같다는 것이다.

 

참조자를 사용할 때는 주의할 점이 있다.

 

1. 선언할 때 반드시 초기화해야 한다.

2. 참조자 배열을 선언할 수 없다.

3. 참조 변수에 대한 포인터를 만들 수 있고, 포인터를 참조하는 참조 변수를 만들 수 있다.

 

{
    //int& ref;		에러, 선언시 초기화해야함
    //ref = num;
    
    //int& ref[10];	//배열 사용 x
    
    int* ptr = &num;
    int* &ref = ptr;	//포인터를 참조하는 참조 변수
    int** pref = &ref;	//참조 변수에 대한 포인터
}

 

 

참조자를 반환할 수 있다.

 

#include <iostream>
using namespace std;

int& TestFunc1(int& ref)
{
	ref++;
	return ref;
}
int TestFunc2(int& ref)
{
	ref++;
	return ref;
}
int main()
{
	int num1 = 10;
    
	int num2 = TestFunc1(num1);
	int& num3 = TestFunc1(num1);

	int num4 = TestFunc2(num1);
	//에러, 반환형이 값의 형태이면, 참조자로 받을 수 없다.
	//int& num5 = TestFunc2(num1);
    
	return 0;
}

 

반환형이 값의 형태이면, 참조자로 그 값을 받을 수 없다.

반환형이 참조형이면 참조자, 변수로 받을 수 있다.

'C++' 카테고리의 다른 글

[C++] 메모리 동적 할당 new와 delete 연산자  (0) 2019.12.17
[C++] 생성자와 소멸자  (0) 2019.12.16
[C++] this 포인터  (0) 2019.12.15
[C++] 클래스와 메소드  (0) 2019.12.15
[C++] 네임스페이스(Namespace)  (0) 2019.12.14