더북(TheBook)

배열의 크기에 따라 첫 번째 방법이 편할 때도 있고, 두 번째 방법이 편할 때도 있습니다. 하지만 배열의 크기가 커지면 두 번째 방법을 주로 쓰게 될 것입니다.

다차원 배열도 배열 요소의 개수(예: int a[])를 생략할 수 있습니다. 그러나 1차원 배열과는 다르게 주의가 필요합니다. 다음 2차원 배열에서 배열 요소를 생략하는 세 가지 경우(case)를 살펴보겠습니다.

case 1: int a[][3] = { 1, 2, 3, 4, 5, 6 };
case 2: int b[2][] = { 1, 2, 3, 4, 5, 6 };
case 3: int c[][] = { 1, 2, 3, 4, 5, 6 };

세 가지 경우 중 정상적으로 수행되는 것과 에러가 발생하는 것은 무엇일까요? 어떤 경우에 오류가 발생할지 생각해 보세요.

결론부터 얘기하면 case 1은 정상적으로 수행되고, case 2case 3은 오류가 발생합니다. case 1은 첫 번째 배열 요소의 크기를 지정하지 않았고, 두 번째 배열 요소의 크기를 3으로 지정하였습니다. 그리고 1~6까지 초기화하였습니다. 컴파일러는 1~6까지의 숫자를 a[0][0], a[0][1], a[0][2], a[1][0], a[1][1], a[1][2]에 차례대로 저장하면서 첫 번째 배열 요소의 개수는 자동으로 2라고 인식합니다.

case 2는 첫 번째 배열 요소의 크기를 2로 지정하였고 두 번째 배열 요소 크기는 지정하지 않았습니다. 그렇다면 컴파일러는 마지막 배열 요소 크기가 지정되지 않아 두 번째 요소를 몇 번 저장하고 첫 번째 요소로 넘어가야 하는지 결정할 수 없습니다.

예를 들어 a[0][0] a[0][1] 다음으로 a[1][0] a[1][1]이 오는지, a[0][0] a[0][1] a[0][2]를 저장한 다음 a[1][0] a[1][1] a[1][2]으로 넘어가는지를 결정할 수 없습니다.

case 3case 2와 마찬가지 원인으로 오류가 발생합니다. 그러므로 2차원 이상의 배열을 사용하면서 배열의 크기를 생략할 때는 주의를 기울이면서 적용해야 한다는 점을 꼭 기억하세요.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.