배열(array)이란 한가지 자료형을 연속적으로 나열하는 것을 말합니다. 만약 100명의 이름을 저장하여 사용하고자 한다면, 100개의 변수를 선언해서 각각 저장하고 사용해야 하는데, 배열을 사용하면 변수 하나로 아주 쉽게 사용할 수 있습니다.
선언할 때는
자료형 변수이름[갯수];
와 같이 사용하며, 아래와 같이
int a[5] = {1, 2, 3, 4, 5};
int형 a라는 변수는 5개 만큼을 저장할 수 있는 배열로 선언되었고, 각각의 요소에 1, 2, 3, 4, 5를 저장하도록 초기화 되었습니다. 이런식으로 선언할 수 있고, 초기화는 중괄호 {}로 묶어 각각의 요소를 콤마로 구분하여 합니다.
배열의 초기화는 변수를 선언할때처럼 생략하거나, 갯수보다 적은 수로 초기화 할 수 있습니다.
int a[5];
int b[5] = {1, 2};
int형 배열 a는 초기값을 주지 않아 모두 쓰레기값이 들어가게 됩니다. 반면에 int형 배열 b는 자신의 크기보다 작은 갯수의 1, 2는 정상적으로 넣고, 그 이후는 0으로 초기화가 됩니다. 그래서 배열을 모두 0으로 초기화 하고자 할때에는
int a[5] = {0};
이렇게 사용하는 것이 편리합니다.
또, 배열을 선언할때 다음과 같이 갯수를 지정하지 않고 쓰는 방법도 있습니다.
int a[] = {1, 2, 3};
이렇게 사용하게 되면, a란 배열은 초기화된 값의 갯수만큼의 크기를 자동으로 가지게 됩니다.
배열에 값이 저장된 공간을 요소(element)라고 합니다. 배열에서 각 요소에 접근하려면 배열 뒤에 [ ] (대괄호)를 사용하며 [ ] 안에 각 요소의 인덱스를 지정해주면 됩니다.
numArr[0]; // 첫 번째 요소, 인덱스 0
numArr[5]; // 여섯 번째 요소, 인덱스 5
numArr[9]; // 열 번째 요소, 인덱스 9
여기서 주의할 점은 배열의 인덱스는 항상 0부터 시작한다는 점입니다. 따라서 배열 numArr의 첫 번째 요소는 numArr[0]이 됩니다.
배열을 선언할 때도 [ ]를 사용하고 배열의 요소에 접근할 때도 [ ]를 사용합니다. 같은 [ ] 기호를 사용해서 헷갈리기 쉽지만 선언과 사용을 구분해서 생각하면 됩니다. 즉, 배열을 선언할 때 [ ]는 “이 변수가 배열이고 크기는 얼마다”라고 알려주는 역할이고, 배열을 사용할 때 [ ]는 “배열의 요소에 접근하겠다”는 뜻입니다.
요소가 0개인 배열은 선언할 수 없습니다. 따라서 배열을 선언할 때 크기는 항상 1 이상입니다. 하지만 배열에 접근할 때는 인덱스가 0부터 시작합니다.
int numArr[0]; // 컴파일 에러. 크기가 0인 배열은 선언할 수 없음
int numArr[1]; // 크기가 1인 배열. 요소가 1개
numArr[0]; // 배열의 첫 번째 요소, 인덱스 0에 접근
배열의 인덱스가 0부터 시작하는 이유는 메모리 주소가 0부터 시작하기 때문입니다. 배열도 포인터이므로 인덱스가 0부터 시작하면 요소 접근과 포인터 연산이 일치하게 됩니다