14. 2차원 배열과 포인터배열
C언어의 기본적인 문법 자체는 단순하다. 그러나 응용에 따라 얼마든지 확장이 가능하기 때문에 가볍고 강력한 언어가 된 것이다. 이미 우리는 기본자료형을 모아서 배열이라는 응용자료형을 만들어 보았다. 하지만 단순한 배열은 좀더 복잡하고 많은 데이터를 처리하기에는 한계가 있다.
예를 들어, 4과목의 학생 점수를 처리하는 프로그램을 만든다고 하자. 이때 학생 한 명의 점수를 처리하기 위해서는 배열요소가 4개인 int형 배열을 선언하면 된다.
|
int score[4]; // 한 명의 점수를 저장할 배열 |
만일 학생이 3명이라고 하면 같은 형태의 배열이 3개가 필요할 것이다.
|
int score1[4]; int score2[4]; int score3[4]; |
배열을 3개 선언하는 것은 큰 문제가 아니겠지만 학생수가 30명이 된다면 감당하기 힘들어진다. 이때는 각 배열을 하나의 배열요소로 하여 또 다른 형태의 배열을 만들 수 있다. 이 배열을 2차원 배열이라고 한다. 즉, 2차원 배열은 1차원 배열을 배열요소로 갖는 새로운 배열이 되는 것이다.
2차원 배열을 선언하는 방법은 1차원 배열과 같이 배열명과 첨자를 사용한다. 다만, 배열요소 자체가 하나의 배열이므로 첨자를 두 개 사용하게 된다. 3명의 학생에 대한 4과목의 데이터를 저장할 2차원 배열을 선언해 보자.
|
int score [3] [4]; 배열요소의 형태 : int형 변수 4개짜리 1차원 배열이 2차원 배열의 배열요소가 된다. ↑ ↑ 배열명 배열요소의 개수 |
2차원 배열 score에서는 첫 번째 첨자가 배열요소의 개수이며, 두 번째 첨자는 배열요소의 형태를 의미한다. 즉, 3개의 배열요소가 각각 int형 변수 4개짜리 1차원 배열임을 나타내는 것이다. 결국 전체 배열은 12개의 int형 기억공간을 갖는 1차원 배열과 같다. 실제로 기억 공간을 할당하는 것도 배열요소가 12개인 1차원 배열과 다를 바가 없다.
그러나 2차원 배열은 1차원 형태의 물리적인 기억공간을 행렬과 같은 2차원의 논리적인 구조로 쉽게 사용할 수 있도록 해준다. 즉, 첫번째 첨자를 행의 개수, 두 번째 첨자를 열의 개수로 생각하면 3행 4열의 행렬이 되는 것이다.
2차원 배열은 논리적으로