Reference (참조)
C++의 참조 방법에 대해서 알아보자
포인터는 *를 사용했다면 참조는 &를 사용한다
#include <iostream>
using namespace std;
// 참조 전달
struct StatInfo
{
int hp;
int attack;
int defence;
};
void PrintInfoByRef(StatInfo& info);
void PrintInfoByPtr(StatInfo* info);
void CreateMonster(StatInfo* info);
int main()
{
int number = 1;
int* pointer = &number;
*pointer = 2;
// 로우레벨(어셈블리) 실제 작동 방식은 int*와 똑같음
// 실행해보면 포인터와 100% 동일
int& reference = number;
// C++ 관점에서는 number라는 바구니에 또다른 이름을 부여한 것.
// number라는 바구니에 reference 라는 다른 이름을 지어줌
// 앞으로 reference 바구니에다가 뭘 꺼내거나 넣으면,
// 실제 number 바구니 그 값(진짜 값) 을 꺼내거나 넣게됨
reference = 3;
// 그런데 귀찮게 또 다른 이름을 짓는 이유는?
// 참조 전달 때문!
// 포인터의 '->' 사용을 없애고 '.' 을 찍어서 그대로 쓸 수 있게 해줌 포인터와 일반 선언의 중간단계 정도로 이해
StatInfo info;
CreateMonster(&info);
PrintInfoByRef(info);
PrintInfoByPtr(&info);
return 0;
}
void PrintInfoByRef(StatInfo& info)
{
cout << "-------PrintInfoByRef-------" << endl;
cout << "HP : "<< info.hp << endl;
cout << "ATT : "<< info.attack << endl;
cout << "DEF : "<< info.defence << endl;
cout << "-------------------" << endl;
}
void PrintInfoByPtr(StatInfo* info)
{
cout << "-------PrintInfoByPtr-------" << endl;
cout << "HP : " << info->hp << endl;
cout << "ATT : " << info->attack << endl;
cout << "DEF : " << info->defence << endl;
cout << "-------------------" << endl;
}
void CreateMonster(StatInfo* info)
{
info->hp = 40;
info->attack = 8;
info->defence = 1;
}
아래 사진을 보면 알수있는 것처럼 참조를 사용하면 number의 값을 직접 바꿀수있다.
위 주석에서 보았듯이 포인터와 참조는 앞의 표기와 동작의 방법만 다를뿐 (.과 ->) 결과는 동일하게 출력된다.

