참조 기초

이승덱·2021년 7월 21일

CPP

목록 보기
18/70
#include <iostream>

using namespace std;

//int형 3개 총 12 바이트

struct StatInfo {

 int hp; //+0

 int attack; //+4

 int defence; //+8

};

void CreateMonster(StatInfo* info) {

 info->hp = 100;

 info->attack = 10;

 info->defence = 5;

}

//값 전달 방식

//복사에 의한 값 전달

void PrintInfoByCopy(StatInfo info) {

 cout << "HP: " << info.hp << endl;

 cout << "attack: " << info.attack << endl;

 cout << "defence: " << info.defence << endl;

}

//주소 전달 방식

void PrintInfoByCopy(StatInfo* info) {

 cout << "HP: " << info->hp << endl;

 cout << "attack: " << info->attack << endl;

 cout << "defence: " << info->defence << endl;

}

//참조 전달 방식

void PrintInfoByRef(StatInfo& info) {

 cout << "HP: " << info.hp << endl;

 cout << "attack: " << info.attack << endl;

 cout << "defence: " << info.defence << endl;

}

//각각 방식의 차이

//값 전달 방식은 만약 전달해야할 구조체가 10000바이트라면 10000바이트를 복사해야함

//주소 전달 방식은 8바이트만 전달하면 된다.

//참조 전달 방식으 포인트와 동일하여 8바이트만 전달, 그리고 값 전달처럼 편리하게 사용

//값 전달 방식과 주소 전달 방식의 중간 방식이 참조 전달 방식이라고 이해하자

int main()

{

 int number = 1;

 //참조방식

 //로우레벨(어셈블리) 관점에선 실제 작동 방식은 포인터와 같다

 int& reference = number;

 //C++관점에서는 number라는 바구니에 또 다른 이름을 부여한 것 (별명)

 // 앞으로 reference 바구니에다가 뭘 꺼내거나 넣으면,

 //실제 number 바구니에서 그 값을 꺼내거나 넣음.

 reference = 3;

 cout << number << endl;

 StatInfo info;

 CreateMonster(&info);

 PrintInfoByCopy(info);

 PrintInfoByCopy(&info);

 PrintInfoByRef(info); //주소값 전달 없이 변수를 전달하면 알아서 주소값 참조

 return 0;

}
profile
공부 기록용 블로그입니다

0개의 댓글