34.1 2차원 배열을 선언하고 요소에 접근하기
2차원 배열은 [ ] (대괄호)를 두 번 사용하여 선언하며 첫 번째 대괄호에는 세로 크기, 두 번째 대괄호에는 가로 크기를 지정합니다. 일반적으로 2차원 공간은 가로x세로로 표기하지만 배열로 만들 때는 세로x가로로 표기합니다. 꼭 기억해두세요.
- 자료형 배열이름[세로크기][가로크기];
- 자료형 배열이름[세로크기][가로크기] = { { 값, 값, 값 }, {값, 값, 값} };
다음은 세로 크기가 3, 가로 크기가 4인 int형 2차원 배열을 선언하는 방법입니다. 2차원 배열을 선언하면서 초기화하려면 { } (중괄호)를 사용하는데 가로 요소들을 먼저 묶어주고, 가로 줄을 세로 크기 만큼 다시 묶어줍니다. { } 안의 값과 줄 개수는 가로, 세로 크기보다 작아도 되지만 크면 안 됩니다.
int numArr[3][4] = { { 가로 요소 4개 }, { 가로 요소 4개 }, { 가로 요소 4개 } }; // ↑ 세로 3줄
{ }를 사용하여 배열에 값을 할당하는 방법은 배열을 선언할 때만 사용할 수 있으며 이미 선언된 배열에는 사용할 수 없습니다.
2차원 배열의 요소에 접근하려면 배열 뒤에 [ ] (대괄호)를 두 번 사용하며 [ ] 안에 세로와 가로 인덱스를 지정해주면 됩니다.
- 배열[세로인덱스][가로인덱스]
즉, 다음과 같이 2차원 배열에서 세로 인덱스 1, 가로 인덱스 2인 요소의 값을 가져올 수 있습니다.
int num1 = numArr[1][2]; // 2차원 배열에서 세로 인덱스 1, 가로 인덱스 2인 요소에 접근
이제 2차원 배열을 선언하고 요소의 값을 출력해보겠습니다.
two_dimensional_array.c
#include <stdio.h> int main() { int numArr[3][4] = { // 세로 크기 3, 가로 크기 4인 int형 2차원 배열 선언 { 11, 22, 33, 44 }, { 55, 66, 77, 88 }, { 99, 110, 121, 132 } }; // ↓ 세로 인덱스 printf("%d\n", numArr[0][0]); // 11 : 세로 인덱스 0, 가로 인덱스 0인 요소 출력 printf("%d\n", numArr[1][2]); // 77 : 세로 인덱스 1, 가로 인덱스 2인 요소 출력 printf("%d\n", numArr[2][0]); // 99 : 세로 인덱스 2, 가로 인덱스 0인 요소 출력 printf("%d\n", numArr[2][3]); // 132: 세로 인덱스 2, 가로 인덱스 2인 요소 출력 // ↑ 가로 인덱스 return 0; }
실행 결과
11 77 99 132
세로 크기 3, 가로 크기 4인 int형 2차원 배열을 선언하고, 값을 초기화 했습니다.
int numArr[3][4] = { // 세로 크기 3, 가로 크기 4인 int형 2차원 배열 선언 { 11, 22, 33, 44 }, { 55, 66, 77, 88 }, { 99, 110, 121, 132 } };
2차원 배열도 인덱스는 0부터 시작합니다. 따라서 배열 numArr의 가로 첫 번째, 세로 첫 번째 요소는 numArr[0][0]이 됩니다.
다음과 같이 2차원 배열을 초기화 할 때 가로 요소를 중괄호로 묶지 않아도 컴파일이 잘됩니다. 물론 결과도 가로 요소를 중괄호로 묶었을 때와 같습니다. 하지만 이렇게 작성하면 이해하기가 어려워서 잘 쓰이지 않는 방법입니다.
int numArr[3][4] = { 11, 22, 33, 44, 55, 66, 77, 88, 99, 110, 121, 132 };