C언어에서 배열은 데이터를 효율적으로 저장하고 처리할 수 있도록 도와주는 기본적인 자료구조입니다. 그중에서도 다차원 배열은 2차원 표나 3차원 공간 데이터를 다룰 때 매우 유용합니다. 이번 글에서는 다차원 배열의 개념부터 선언 및 초기화 방법까지 차근차근 정리해보겠습니다.
🔍 I. 다차원 배열이란?
- C언어는 4차원 이상의 배열 선언도 문법상 허용하지만, 현실적으로는 2차원 혹은 3차원 배열까지만 사용하는 것이 일반적입니다.
- 다차원 배열은 데이터를 표 형식(2차원) 또는 **공간 구조(3차원)**로 저장하는 데 사용됩니다.
✅ 배열 선언 예시
배열 차원 | 선언 방식 | 설 |
1차원 | int arrOneDim[10]; | 정수 10개를 저장하는 배열 |
2차원 | int arrTwoDim[5][5]; | 가로 5 × 세로 5의 표 |
3차원 | int arrThreeDim[3][3][3]; | 가로 × 세로 × 높이 모두 3의 공간 배열 |
🔍 II. 2차원 배열
📌 선언 방식
type arr[행의 갯수][열의 갯수]; // 예: int arr[3][4];
- 행은 세로 방향, 열은 가로 방향입니다.
- 예: arr[2][3] = 10; 은 3행 4열 중 3행 4열 위치에 10 저장을 의미합니다.
🧠 메모리 구조
- 2차원 배열도 메모리상에서는 1차원적인 구조로 저장됩니다.
- 즉, 컴파일러가 내부적으로 arr[i][j]를 적절히 1차원 주소로 환산합니다.
✅ 초기화 예시
int arr[3][3] = {
{1, 2, 3},
{4, 5, 6},
{7, 8, 9}
};
- 명시적으로 각 행을 나누어 초기화하는 방식입니다.
int arr[3][3] = { {1}, {4, 5}, {7, 8, 9} };
- 부족한 요소는 자동으로 0으로 초기화됩니다.
- 예: arr[0][1], arr[0][2], arr[1][2]는 0입니다.
int arr[3][3] = {1, 2, 3, 4, 5, 6, 7};
- 행과 열 순서대로 자동 초기화, 부족한 값은 0으로 채워짐.
📝 배열 크기 생략 초기화
int arr1[][4] = {
{1, 2, 3, 4},
{5, 6, 7, 8}
}; // O
- **세로 크기(행 개수)**는 생략 가능.
- int arr1[ ][ ] = {...}; 형태는 ❌ 컴파일 오류 발생.
🔍 III. 3차원 배열
📌 선언 방식
type arr[높이][행의 갯수][열의 갯수];
- 예: int arr[2][3][4];는 총 2 × 3 × 4 = 24개의 요소를 가지는 배열입니다.
- 높이(Z) → 행(Y) → 열(X) 순으로 인덱싱됩니다.
🔧 사용 예시
int arr[2][2][2] = {
{
{1, 2},
{3, 4}
},
{
{5, 6},
{7, 8}
}
};
- 위 예시는 2개의 층, 각 층에 2행 2열 구조를 가진 배열입니다.
예제
문제1
가로의 길이가 9, 세로의 길이가 3인 int형 2차원 배열을 선언하여 구구단 중 2단, 3단, 4단을 저장하자. 그리고 제대로 저장이 되었는지 확인하기 위한 출력을 진행하는 예제를 작성해보자.


문제2

위 그림의 형태대로 배열 A와 배열 B를 선언하자. 그리고 배열 A는 선언과 동시에 그림에서 명시하는 대로 초기화를 진행하자! 그리고 배열 B도 위 그림에서 보이는 대로 초기화를 진행하되, 반드시 배열 A에 저장된 값을 이용해서 초기화를 진행해야 한다.


문제3
성적관리 프로그램을 작성하자. 과목은 국어, 영어, 수학, 국사 이렇게 네 과목이고 학생은 철희, 철수, 영희, 영수 이렇게 네 사람이다. 프로그램 사용자로부터 이 네 사람의 네 과목 점수를 입력 받는다. 그리고 미리 선언해 놓은 배열에 그 값을 저장해야 한다. 저장이 끝났다면, 개인별 총점과 과목별 총 점을 계산해서 각각 마지막 열과 행에 저장해야한다. 그리고 마지막에는 저장된 값의 검증을 위한 출력을 보여야 한다.


✅ 정리하자면, C언어에서 다차원 배열은 단순한 데이터 저장을 넘어 구조화된 데이터 처리에 매우 유용한 도구입니다. 특히 2차원 배열은 표 형태 데이터, 3차원 배열은 공간 좌표나 시간축 데이터 등에서 자주 활용됩니다.
'공부 > C언어' 카테고리의 다른 글
[C언어] 포인터 심화 – 2차원 배열의 포인터 형식 (0) | 2025.05.17 |
---|---|
[C언어] 포인터 심화 – 이중 포인터(double pointer) (0) | 2025.05.16 |
[C언어] 윤성우의 열혈 C 프로그래밍 - 도전! 프로그래밍2 (0) | 2025.05.14 |
[C 언어] 포인터의 const 선언 완벽 정리 (0) | 2025.05.12 |
[C언어] 함수와 배열, 그리고 포인터의 관계 정리, 함수의 호출방식 (0) | 2025.05.11 |