새소식

인기 검색어

게임 개발/언리얼 강의 (클라-서버)

[언리얼 MMORPG pt1] 배열 기초

  • -
#include <iostream>
using namespace std;


struct StatInfo
{
	int hp = 0xAAAAAAAA;
	int attack = 0xBBBBBBBB;
	int defence = 0xDDDDDDDD;
};

int main()
{
	// TYPE 이름[개수];

	// 배열의 크기는 상수여야 함 (VC 컴파일러 기준, gcc는 통과함)
	const int MONSTER_COUNT = 10;
	StatInfo monsters[MONSTER_COUNT];

	// 여태껏 변수들의 [이름]은 바구니의 이름이었음
	// 배열은 [이름] 조금 다르게 동작한다.
	StatInfo players[10];
	// players = monsters; // error

	// 그럼 배열의 이름은 뭐지?
	// 포인터다. 즉, 배열의 이름은 곧 배열의 시작 주소
	// 정확히는 시작 위치를 가리키는 TYPE* 포인터
	auto WhoAmI = players;

	StatInfo* monster_0 = monsters;
	monster_0->hp = 100;
	monster_0->attack = 10;
	monster_0->defence = 5;

	// 포인터의 덧셈
	StatInfo* monster_1 = monster_0 + 1;
	monster_1->hp = 200;
	monster_1->attack = 20;
	monster_1->defence = 10;

	// 포인터와 참조는 자유자재로 변환 가능하다
	StatInfo& monster_2 = *(monsters + 2);
	monster_2.hp = 300;
	monster_2.attack = 30;
	monster_2.defence = 15;

	// [주의] 이거는 완전 다른 의미다
	// 값이 복사되는 것이다
	StatInfo temp;
	temp = *(monsters + 3);
	temp.hp = 400;
	temp.attack = 40;
	temp.defence = 20;

	// 반복문으로 배열을 순회하면서 값을 채워보자
	for (int i = 0; i < MONSTER_COUNT; i++)
	{
		StatInfo& monster = *(monsters + i);
		monster.hp = 100 * (i + 1);
		monster.attack = 10 * (i + 1);
		monster.defence = 5 * (i + 1);
	}

	// 근데 *(monsters + i) 이거 너무 길다, 가독성이 떨어진다
	// 인덱스 사용!
	// 배열은 0번부터 시작 [i]는 i번째 원소를 가리킨다
	monsters[0].hp = 100;
	monsters[0].attack = 10;
	monsters[0].defence = 5;

	for (int i = 0; i < MONSTER_COUNT; i++)
	{
		monsters[i].hp = 100 * (i + 1);
		monsters[i].attack = 10 * (i + 1);
		monsters[i].defence = 5 * (i + 1);
	}

	// 배열 초기화 문법 몇가지
	int numbers[5] = { }; // 모든 원소를 0으로 초기화
	int numbers_2[5] = { 1, 2, 3 }; // 1, 2, 3, 0, 0
	int numbers_3[5] = { 1, 2, 3, 4, 5 }; // 1, 2, 3, 4, 5
	int numbers_4[] = { 1, 2, 3, 4, 5 }; // 1, 2, 3, 4, 5 데이터 개수만큼 자동으로 배열 크기 결정

	char helloStr[] = { 'H', 'e', 'l', 'l', 'o', '\0' }; // 문자열은 반드시 마지막에 널문자를 넣어야 한다
	char helloStr_2[] = "Hello"; // 위와 동일한 표현

	return 0;
}
Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.