오븐 노트

[C++] 참조 기초 본문

Develop/C++

[C++] 참조 기초

오 븐 2022. 7. 10. 19:32
#include <iostream>
using namespace std;

struct StatInfo
{
	int hp;
	int attack;
	int defence;
};

void CreateMonster(StatInfo* info)
{
	info->hp = 100;
	info->attack = 8;
	info->defence = 5;
}

// 1) 값 전달 방식
// [매개변수][RET][지역변수(info)][매개변수(info)][RET][지역변수]
void PrintInfoByCopy(StatInfo info)
{
	cout << "---------------------" << endl;
	cout << "HP: " << info.hp << endl;
	cout << "ATT: " << info.attack << endl;
	cout << "DEF: " << info.defence << endl;
	cout << "---------------------" << endl;
}

// 2) 주소 전달 방식
// [매개변수][RET][지역변수(info)][매개변수(&info)][RET][지역변수]
void PrintInfoByPtr(StatInfo* info)
{
	cout << "---------------------" << endl;
	cout << "HP: " << info->hp << endl;
	cout << "ATT: " << info->attack << endl;
	cout << "DEF: " << info->defence << endl;
	cout << "---------------------" << endl;
}

// 3) 참조 전달 방식
// 값 전달처럼 편리하게 사용하고, 주소 전달처럼 주소값을 이용하여 원본을 수정하는 방식
// 형태는 일반 값 전달 방식, 동작은 포인터와 같은 방식
void PrintInfoByRef(StatInfo& info)
{
	cout << "---------------------" << endl;
	cout << "HP: " << info.hp << endl;
	cout << "ATT: " << info.attack << endl;
	cout << "DEF: " << info.defence << endl;
	cout << "---------------------" << endl;
}

int main()
{
	int number = 1;

	int* pointer = &number;
	*pointer = 2;
	
	// 참조
	// 어셈블리 관점에서 실제 작동 방식은 포인터와 같다
	// C++ 관점에서는 number라는 변수에 또 다른 이름을 부여한 것
	// 따라서 해당 변수명을 조작 시 number가 조작됨
	// 실행 로그를 보면 포인터와 완벽히 같다
	int& reference = number;
	reference = 3;

	StatInfo info;

	CreateMonster(&info);

	PrintInfoByCopy(info);
	PrintInfoByPtr(&info);
	PrintInfoByRef(info);

	return 0;
}

[C++과 언리얼로 만드는 MMORPG 게임 개발 시리즈] Part1: C++ 프로그래밍 입문 - 인프런 | 강의
 
C++ 카테고리의 글은 인프런 Rookiss님의 강의를 공부하며 정리하는 내용입니다.
이미 알고 있는 내용도 다시 정리 되어있을 수 있습니다.

 

모든 글은 제가 공부하기 위해 작성합니다.

'Develop > C++' 카테고리의 다른 글

[C++] 배열 기초  (0) 2022.07.11
[C++] 포인터 vs 참조  (0) 2022.07.10
[C++] 포인터 실습  (0) 2022.07.05
[C++] 포인터 연산  (0) 2022.07.01
[C++] 포인터 기초 #2  (0) 2022.07.01