프로그래밍 언어/C++
[C++] 참조자
claire
2022. 1. 8. 13:57
참조자는 포인터와 비슷한 성격을 띠지만 다른 개념이다. 참조자의 개념과 참조자와 포인터의 차이에 대해 알아보자.
1. 참조자의 개념
변수는 할당된 메모리 공간에 붙여진 이름이다. 여기에 이름을 더 부여할 수 있는데, 참조자는 자신이 참조하는 변수를 대신할 수 있는 또 하나의 이름이다. 간단히 말하면 별칭 같은 것이다.
#include <iostream>
using namespace std;
int main(void)
{
int num1=10;
int &num2=num1;
num2+=10;
cout<<num1<<endl;
cout<<num2<<endl;
return 0;
}
위의 코드를 보자.
참조자는 &를 이용하여 선언한다. 이미 선언된 변수의 앞에 이 연산자가 오면 주소 값의 반환을 명령하는 뜻이지만, 새로 선언되는 변수의 이름 앞에 오면 참조자의 선언을 뜻하게 된다. 그래서 int &num2=num1;과 같이 선언한다.
위의 코드를 실행해보면 num1과 num2모두 20의 값을 갖는다. 여기서 num2가 num1의 다른 이름이라고 생각하면 이해가 쉽다.
즉, num2는 num1의 다른 이름이고 num2를 변화시키는 것은 num1을 변화시키는 것이다. 또 하나의 변수에 다수의 참조자를 선언할 수도 있다. 아래와 같이 선언하면 하나의 변수에 다양한 레퍼런스를 선언할 수 있다.
2. 참조자와 포인터의 차이
- 포인터는 null값이 있지만, 참조자는 null값이 없다. - null값이란, 결정되지 않거나 모르는 값을 의미하는데 참조자는 선언 시 바로 초기화해주어야 한다.
- 참조자는 변수를 입력받고 포인터는 주소 값을 입력받는다.
- 참조자는 한 번 지정한 객체를 변경할 수 없지만 포인터는 가능하다. - 참조자는 한 번 객체를 정하면 바꿀 수 없지만 포인터의 경우 주소 값을 변경하여 바꿀 수 있다.
공통점은 둘 다 다른 객체(변수)를 간접적으로 참조한다는 것이다.