참조자(reference) : 변수에 별명을 붙여 접근

- 변수 var 선언 후 ref라고 하는 별명 붙이기 (& 사용)

int var = 10;
int &ref = var;

// 참조자에 값을 대입하면 참조자가 참조하는 변수의 값이 변경됨
ref = 20; 	// var의 값이 20으로 변경됨

 

 

 

참조자 (reference) vs 포인터 (pointer)

 

1. 참조자는 선언과 동시에 초기화 되어야 함

int &ref;	// 컴파일 에러

 

2.  포인터는 변수이기 때문에 포인터가 가리키는 대상은 변경될 수 있음

    참조자는 자신만의 메모리 공간이 할당되지 않기 때문에 참조자가 가리키는 대상은 변경될 수 없음

int &ref = var1;
ref = var2;		//컴파일 에러 : 참조하는 대상을 변경할 수 없음

 

3. 참조자를 상수로 초기화 하면 역시 컴파일 에러남

참조자는 참조대상을 변경할 수 없음 -> 참조하는 대상이 수시로 변경되는 경우에는 포인터 사용

참조자는 선언과 동시에 반드시 초기화 되기 때문에 NULL이 될 수 X

 -> NULL이 될 가능성이 있는 경우에는 포인터 사용( 포인터의 경우에는 NULL 포인터가 존재함)

 

 

참조자의 용도 (상수 포인터와 가장 유사)

- 주로 함수 호출 시에 매개 변수와 반환 값으로 사용됨

- 참조자를 함수의 매개 변수로 사용하면 참조자를 이용하여 함수 외부에 존재하는 변수의 값을 변경할 수 있음

#include <iostream>
using namespace std;

void DecByR(int &r) {	//r은 time의 참조자
	r--;
	return;
}

void DecByP(int* p) {
	--(*p);
	return;
}

int main() {
	int time = 10;

	DecByR(time);	//time을 전달
	cout << time << endl;	// 9

	DecByP(&time);	//time의 주소를 전달
	cout << time << endl;	// 8 

	return 0;
}

 

const 참조자

- 참조자 앞에도 const 수식어 사용 가능 

- 상수를 매개 변수로 받는 경우에 필요함

 

+ Recent posts