[C++] 처음부터 시작하는 C++ 7편. Reference(참조자) 사용법

in #kr-dev6 years ago (edited)

안녕하세요!! @wonnieyoon입니다.
오늘은 참조자에 대해 포스팅 하겠습니다.

1.Reference( 참조자)

참조자(reference)는 변수에 다른 이름을 붙여준다고 생각하시면 됩니다.
변수를 선언하게 되면 메모리에 공간을 차지하게 됩니다.
그때 하나의 이름이 아니라 여러개의 이름을 부여할수 있습니다.
그렇기 때문에 만약 변수가 없어진다면 참조할수 없습니다.

int main()
{
int a = 10;
int &b = a;

cout << "a: " << a << endl;
cout << "b: " << b << endl;

cout << "&a: " << &a << endl;
cout << "&b: " << &b << endl;

return 0;

}

출력

&b = a; 라는 말은 a의 변수의 별명을 b로 정하겠다는 의미입니다.
a,b를 출력하라는 의미이고 변수앞에 &를 붙이면 주소를 가르키게 됩니다.
&a,&b를 출력하라는 것은 a,b주소를 출력하라는 것이고 a,b 같은 공간을 가르키고 있기 때문에 같은 값이 출력되게 됩니다.

2. Call by Value (Vs) Call by reference

1)Call by value는 값에 의한 호출을 말합니다.

void swap(int a, int b)
{
int temp;
temp = a;
a = b;
b = temp;
}

int main()
{
int a = 10;
int b = 30;

cout << "a: " << a << endl;
cout << "b: " << b << endl;

swap(a, b);

cout << "a: " << a << endl;
cout << "b: " << b << endl;

return 0;

}

출력

출력결과를 보시면 아시겠지만 a,b를 swap 했음에도 불구하고 변동이 없습니다.
왜 그럴까요? swap(int a, int b) swap함수에 있는 변수 int a, int b는 main함수에서 호출한 swap(a,b) 함수에서 a,b를 받기 위한 변수이지만 주소가 다른 변수이기 때문에 swap()함수 안에서 a,b를 바꿨다고 해서 main에 있는 a,b가 바뀐것이 아닙니다.

2)call by reference는 참조에 의한 호출입니다.

void swap(int &a, int &b)
{
int temp;
temp = a;
a = b;
b = temp;
}

int main()
{
int a = 10;
int b = 30;

cout << "a: " << a << endl;
cout << "b: " << b << endl;

swap(a, b);

cout << "a: " << a << endl;
cout << "b: " << b << endl;

return 0;

}

출력

코드를 보시면 아시겠지만 call by value 와 달라진점은
변수 앞에 &를 붙였다는 것입니다.
swap(int &a,int &b) 를 사용하게 되면 main에서 호출한 swap(a,b)의 a,b 변수들을 swap함수에서 &a,&b로 받게 되고 이것은 메인에 있는 변수 a,b의별명을 a,b로 하겠다 라는 말이 됩니다.
그렇기 때문에 같은 주소를 가르키게 되고 같은 주소의 변수 값들이 바뀌게 되므로 swap함수가 끝나게 되면 a,b의 값은 바뀌게 되는 것입니다.


<목록>

1. [C++] 처음부터 시작하는 C++ 1편. 입출력
2. [C++] 처음부터 시작하는 C++ 2편. using,namespace 사용법
3. [C++] 처음부터 시작하는 C++ 3편. 메모리 할당 및 해제( new , delete ) 사용법
4. [C++] 처음부터 시작하는 C++ 4편. 구조체( struct) 사용법
5. [C++] 처음부터 시작하는 C++ 5편. 클래스 (Class) 사용법
6. [C++] 처음부터 시작하는 C++ 6편. 생성자 및 소멸자 사용법

Sort:  

이번 글도 잘 읽었습니다!

짱짱맨 호출에 출동했습니다!!

C++전문가시군요ㅎㅎ

Coin Marketplace

STEEM 0.27
TRX 0.12
JST 0.032
BTC 67674.48
ETH 3755.42
USDT 1.00
SBD 3.72