배열
선언 방식 : Type 이름[개수];
Ex) int monster[10];
여기서 배열의 크기(10이 들어간 부분)은 상수(변하지 않는수)여야한다- const를 붙임
-배열의 이름은 배열의 시작주소이다, 정확히는 시작위치를 가리키는 type* 포인터
배열을 이용한 자동화 예제
const int monsterCount = 10;
StatInfo monsters[monsterCount];
for (int i = 0; i < 10; i++)
{
StatInfo& monster = *(monsters + i);
monster.hp = 100 * (i + 1);
monster.attack = 10 * (i + 1);
monster.defence = (i + 1);
}
하지만 가독성이 떨어짐 / 그래서 인덱스를 사용함
배열은 0번부터 시작, N번째 인덱스에 해당하는 데이터에 접근하려면 배열이름[N]
*(monsters+i) = monsters[i]
Ex)
for (int i = 0; i < 10; i++)
{
monster[i].hp = 100 * (i + 1);
monster[i].attack = 10 * (i + 1);
monster[i].defence = (i + 1);
}
//보통 인덱스를 사용하는것이 가독성이 좋음
* 배열 초기화 문법 몇가지
int numbers[5] = {}; // 모두초기화
Int numbers1[] = {1,2,3,4}; // 내용이 있는만큼 배열을 만들어줌
문자열 배열 끝에는 \0을 넣어줘야함
배열 요약
- 선언한다
int arr[10] = {};
- 인덱스로 접근해서 사용
arr[1] = 1;
cout<arr[1]<<endl;
포인터는 주소를 담는 바구니라면 배열은 닭장, 즉 그 자체로 같은 데이터끼리 붙어있는 '바구니 모음' 이다, 다만 배열이름은 '바구니 모음' 의 시작 주소이다
//배열을 함수 인자로 넘기면 , 컴파일러가 알아서 포인터로 치환한다(char[] -> char*)
즉 배열의 전체내용을 넘긴게 아니라 시작주소(포인터를 넘긴것.
void Test(char a[])
{
a[0] = 'x';
}
* 다차원 배열
int apartment2d[2][5] = int 타입의5개배열이 2개
int apartment2d[2][5] = {{ }, { }}; 이렇게 초기화
다만 1차원 배열과 메모리상에서는 다를바가 없음.