개념
- 변수의 별칭을 만들어줌. (변수의 두번 째 이름을 만들어준다고 생각하면 됨)
- "[자료형]& [별칭] = [변수 이름];" 형식으로 선언.
- 포인터와 동작 방식이 동일하며, 문법 형식만 다름. (내부적으로 컴파일러가 포인터와 동일하게 동작)
예시
#include <iostream>
using namespace std;
int main()
{
int num = 1;
int& ref = num;
cout << "========일반 변수========" << endl;
cout << "num : " << num << endl;
cout << "ref : " << ref << endl;
cout << endl;
cout << "num memory address : " << &num << endl;
cout << "ref memory address : " << &ref << endl;
cout << endl << endl;
struct s_num
{
int a = 1;
int b = 2;
};
struct s_num sNum;
struct s_num& sNum_ref = sNum;
cout << "========구조체========" << endl;
cout << "sNum a : " << sNum.a << endl;
cout << "sNum b : " << sNum.b << endl;
cout << "sNum_ref a : " << sNum_ref.a << endl;
cout << "sNum_ref b : " << sNum_ref.b << endl;
cout << endl;
cout << "sNum\t memory address : " << &sNum << endl;
cout << "sNum_ref memory address : " << &sNum_ref << endl;
return 0;
}
결과
- 참조하는 변수와 값 동일.
- 참조하는 변수와 메모리 주소 동일.
장점
- 함수 매개 변수로 사용시 Call By Reference로 동작.
- Call By Value의 단점 커버. (함수 호출시 쓸데없는 복사 과정 제거)
- 일반 변수처럼 사용 가능하여 편의성이 좋음. (특정 연산자 사용 불필요)
특징
- 참조 선언시 무조건 초기화 필요.
- 선언 후 값 변경 불가능.
- nullptr 값을 가질 수 없음.
주의 사항
- 함수의 매개 변수가 참조인 경우, 매개 변수의 값이 바뀌지 않는다면 const 를 적어줄 것.
- 참조에 상수 값을 넣을 경우 const 를 적어줄 것.
- 함수의 반환 자료형이 참조인 경우, 지역 변수를 반환하는지 확인할 것.
- 지역 변수는 함수가 끝나면 사용되지 않는 메모리 주소이므로 반환하면 안됨!!