C언어 2차원 배열
선수학습(1개)
요약
C언어 2차원 배열의 선언, 초기화, 메모리 구조, 행과 열 접근 방법을 알아봅니다. 정보처리기사 실기에 자주 출제되는 2차원 배열 핵심 개념을 정리합니다.
2차원 배열 핵심 정리
아래에서 하나씩 배울 내용을 미리 정리한 표입니다.
| 개념 | 설명 | 예시 |
|---|---|---|
| 선언 | 행과 열 크기 지정 | int arr[3][4]; |
| 초기화 | 중괄호로 값 할당 | int arr[2][3] = {1,2,3,4,5,6}; |
| 접근 | arr[행][열]로 접근 | arr[0][1] |
| 메모리 구조 | 행 단위로 연속 저장 | arr[0] → arr[1] → arr[2] |
| 행 이름 | 각 행의 시작 주소 | arr[0], arr[1] |
2차원 배열이란? 쌩기초
1차원 배열이 값을 한 줄로 나열한다면, 2차원 배열은 행(row)과 열(column)으로 구성된 표 형태의 배열입니다.
이 코드는 3행 3열의 2차원 배열을 만들고 1부터 9까지 초기화합니다.
행과 열 쌩기초
2차원 배열에서 행 (row)은 가로줄, 열 (column)은 세로줄입니다.

| 용어 | 방향 | 예시 |
|---|---|---|
| 행 (row) | 가로 → | arr[0]은 0행 전체 (1, 2, 3) |
| 열 (column) | 세로 ↓ | 열 1은 각 행의 두 번째 값 (2, 5, 8) |
| 열 0 | 열 1 | 열 2 | |
|---|---|---|---|
| 0행 | 1 | 2 | 3 |
| 1행 | 4 | 5 | 6 |
| 2행 | 7 | 8 | 9 |
2차원 배열 선언 쌩기초
2차원 배열 초기화 기초
한 줄로 초기화
| 열 0 | 열 1 | 열 2 | |
|---|---|---|---|
| arr[0] | 1 | 2 | 3 |
| arr[1] | 4 | 5 | 6 |
값은 행 순서대로 채워집니다. 먼저 0행을 채우고, 다음 1행을 채웁니다.
행별로 초기화
중괄호로 행을 구분하면 가독성이 좋아집니다.
2차원 배열 접근 기초
arr[행][열] 형태로 접근합니다. 인덱스는 0부터 시작합니다.
실기 시험에서는 2차원 배열을 for문으로 순회하는 문제가 자주 출제됩니다. 바깥 for문이 행, 안쪽 for문이 열을 담당하는 패턴을 기억하세요.
메모리 구조 기초
2차원 배열은 화면에서는 표처럼 보이지만, 실제 메모리에는 한 줄로 쭉 이어져서 저장됩니다. 0행의 값들이 먼저 저장되고, 바로 이어서 1행, 2행 순서로 저장됩니다.

메모리에는 다음과 같이 저장됩니다:
arr[0]의 값 3개가 먼저 오고, 바로 다음 주소에 arr[1]의 값 3개, 그 다음에 arr[2]의 값 3개가 이어집니다. 이렇게 행 순서대로 연속 저장되기 때문에 한 줄로 초기화할 때 값이 행 순서대로 채워지는 것입니다.
행 이름은 주소다 심화
1차원 배열에서 배열 이름이 주소인 것처럼, 2차원 배열의 행 이름도 주소입니다. arr[0]이라고 쓰면 0행에 저장된 값이 아니라, 0행이 시작되는 메모리 주소를 가리킵니다.
| 표현 | 의미 |
|---|---|
arr | 2차원 배열 전체의 시작 주소 |
arr[0] | 0행의 시작 주소 |
arr[1] | 1행의 시작 주소 |
arr[0][0] | 0행 0열의 값 (주소가 아니라 실제 정수값) |
포인터 타입이 궁금하다면 포인터 페이지에서 자세히 다룹니다.
2차원 배열과 포인터 심화
포인터를 아직 배우지 않았다면 이 섹션은 건너뛰어도 괜찮습니다. 포인터를 배운 뒤에 돌아오면 됩니다.
2차원 배열의 행 주소를 포인터 배열에 저장하면, 포인터를 통해 2차원 배열에 접근할 수 있습니다. int *parr[2]는 int 포인터 2개를 담는 배열입니다.
자세한 내용은 포인터 배열을 참고하세요.