오늘의논리 2023. 2. 22. 01:47
728x90

선언 방식 : 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차원 배열과 메모리상에서는 다를바가 없음.

728x90