본문 바로가기
프로그래밍/C언어

C언어 공부하기 - 다차원 배열

by 헬맷쓰다 2020. 10. 6.
반응형

다차원 배열(Multi-dimensional Array)은 배열의 배열(array of arrays)라고도 불립니다. 다차원 배열을 정의는 배열의 정의에서 본 것처럼 대괄호([배열의 크기])를 연속적으로 추가해주면 됩니다. C언어에서 배열의 차원 수의 제한이 있는 것 같지는 않지만 3차원배열 이상으로 정의하여 코딩을 하다보면 머리가 깨질 정도로 헷갈리고 실수할 가능성도 매우 높아집니다.

앞선 포스팅에서 어떤 반의 성적을 일차원 배열로 어떻게 사용하는 지 알아봤는데요, 만약에 반이 2개라면 2차원 배열로 다음과 같이 정의하고 초기화할 수 있습니다. 아래 예제는 두개의 반 성적을 2차원 배열로 정의하고 초기화 한 것입니다. score[2][5]를 간단하게 2행 5열인 행렬이라고 생각하면 쉽습니다. 앞의 [2]는 반이 두개이니까, 뒤의 [5]는 5명의 학생 성적이므로 score[2][5]로 정의 된거죠. 초기화는 중괄호안에 중괄호를 써서 했네요. 논리적으로 따라가 보면 별로 어렵지 않습니다.

short int score[2][5] = { {30, 50, 80, 95, 75},
                          {20, 60, 75, 100, 30} };

편의상 첫번째 행을 1반이라고 하고 두번째 행을 2반이라고 할때, 1반의 3번째 학생의 성적을 printf로 출력하려면 다음과 같이 하면 됩니다.

printf("%d\n", score[0][2]);

배열에서 첨자(index)는 0부터 시작한다고 했으니 일상생활에서 사용하는 순서번호에서 1씩 빼줘야 하는것을 잊으면 안됩니다.

근데 학생 수가 많이 늘어나서 반이 많아진다면 배열을 정의할 때 반의 수만큼 위의 배열에서 앞에 행의 수를 늘려주면 됩니다만, 앞선 포스팅에서 처럼 크기를 비워놓아도 됩니다. 반이 3개일 때 2차원 배열을 다음과 같이 정의하고 초기화 할 수 있습니다.

short int score[][5] = { {30, 50, 80, 95, 75},
                          {20, 60, 75, 100, 30},
                          {10, 20, 30, 40, 50} };

score배열의 첫번째 대괄호 안에 숫자가 없네요. 이제 반이 늘어날 때마다 첫번째 대괄호의 숫자를 신경쓰지않고 초깃값만 추가해주면 됩니다. 그런데 행의 크기는 생략해도 되지만 열의 크기까지 생략해서 score[][]이렇게 정의하면 컴파일 할 때 에러가 납니다.

다차원 배열도 물론 중요한 내장 자료형으로 많이 사용하기는 하지만 나중에 공부할 포인터의 배열에 비해서 사용빈도가 높지는 않습니다. 앞에서 언급 했다시피 배열의 차원이 많아지면 이해하기가 어렵고 실수할 가능성이 많아진다는 사실을 다시한번 강조하며 마침니다. 안녕~ 

반응형

댓글