1. 필요성
struct StatInfo
{
int hp;
int atk;
int def;
};
위의 구조체를 이용하는 몬스터를 여러 마리 만든다고 할 때, 코드의 최적화를 위해 배열을 이용할 수 있다.
2. 문법
int main()
{
StatInfo monsters[10];
return 0;
}
스택 내부에 StatInfo 구조체를 10개씩 이어서 만들어 저장한다.
배열의 크기는 상수이어야 한다(VS 기준).
배열의 이름은 배열의 시작 위치를 가리키는 포인터( [타입]* 포인터 )
즉 위에서 monsters 는 시작 위치의 주소값을 가지는 포인터임.
3. 응용
각 배열의 요소에 접근하는 방법은 포인터의 연산을 사용한다.
int main()
{
StatInfo monsters[10];
StatInfo* monster_0 = monsters;
monster_0->hp = 100;
monster_0->atk = 8;
monster_0->def = 5;
StatInfo* monster_1 = monsters + 1;
monster_1->hp = 200;
monster_1->atk = 20;
monster_1->def = 2;
return 0;
}
포인터가 아닌 참조 문법을 사용하면 다음과 같이 나타낼 수 있다.
StatInfo& monster_2 = *(monsters + 2);
monster_2.hp = 300;
monster_2.atk = 30;
monster_2.def = 3;
한편, 반복문을 사용하여 더 간단히 만들 수 있다.
for (int i = 0; i < 10; i++)
{
StatInfo& monster = *(monsters + i);
monster.hp = 100 * (i + 1);
monster.atk = 10 * (i + 1);
monster.def = (i + 1);
}
*(monsters + i) 와 같은 용법은 가독성이 떨어진다. 이를 해결하기 위해 인덱스를 사용할 수 있다.
for (int i = 0; i<10; i++)
{
// 단, i는 0번째 부터 9번째 까지
monster[i].hp = 100 * (i + 1);
monster[i].atk = 10 * (i + 1);
monster[i].def = (i + 1);
}
4. 배열 초기화 문법
(1) 배열의 모든 요소를 0으로 만든다.
int numbers[5] = {};
(2) 일부 배열만 값을 지정하는 것도 가능하다.
int numbers1[10] = {1, 2, 3, 4, 5};
설정하지 않은 나머지 값은 0으로 저장된다.
(3) 오른쪽의 값의 개수만큼의 배열을 만들고 싶다면 아래와 같이 사용한다.
int numbers2[] = {1, 2, 3, 4, 5, 6, 7};
'기초 C++ 스터디' 카테고리의 다른 글
4-9. 멀티 포인터 (0) | 2023.05.23 |
---|---|
4-7. 포인터 vs 배열 (0) | 2023.05.22 |
4-5. 포인터 vs 참조 (0) | 2023.05.11 |
4-4. 참조 (0) | 2023.05.11 |
4-2. 포인터 연산 (0) | 2023.05.11 |