참조자(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 수식어 사용 가능
- 상수를 매개 변수로 받는 경우에 필요함
'Computer Science > Programming Language' 카테고리의 다른 글
[C++] 객체의 동적 생성 (0) | 2020.06.14 |
---|---|
[C++] 함수 호출 시 인수 전달 방식 (0) | 2020.06.13 |
[C/C++] 동적 메모리 할당(dynamic memory allocation) (0) | 2020.06.12 |
[C/C++] 변수 (지역변수, 전역변수) (0) | 2020.06.10 |
[C++] 디폴트 매개변수 (default parameter) (0) | 2020.06.10 |