소프트웨어/C 언어

[C언어]26. 가장 기초적인 자료구조, 배열에 대하여 알아보자 -3- ( 2 차원 배열, 다차원 배열 )

리습 2013. 6. 16. 07:30


 안녕하십니까. 리습입니다.


 배열이 무엇이고 어떻게 사용되는지 알아보았습니다. 지금까지 배운 배열은 [ ] 을 하나만 사용하며 일렬로만 정렬되었습니다. 그런데 이런 배열을 또다른 배열의 시작지점으로 사용한다면 어떻게 될까요? 1차원적인 직선이 아닌 2차원적 평면의 형태로 배열을 만드는 것입니다. 또 더 확장해서 3차원으로도 만들수도 있겠죠. 이렇게 배열을 확장시킨것이 다 차원 배열입니다.


 다 차원 배열의 첫번째 - 2차원 배열


 2차원 배열은 일렬로 이루어져 있는 배열을 평면으로 확장시켰다 라고 '개념적'으로 생각하시면 됩니다. 실제 메모리 공간에서 평면적으로 변수들이 정렬되어있는것은 아니기 때문이죠. 하지만 사용에 있어서는 평면이라 생각하셔도 됩니다.


 2차원 배열을 사용할 경우 매우 유리한 점이 많습니다. 한개 측면이 아닌 2개의 방향으로 배열을 만들어야 할시에 편하게 사용할 수 있죠. 저번에 만들었던 학생들의 성적을 분석하는 프로그램에서도 학생들의 번호와 소속된 반 모두를 2차원 배열을 사용하면 편리하게 사용할 수 있습니다. 


 그럼 우선 2차원 배열을 어떻게 선언하는지 알아보도록 하죠.

 단순히 1차원 배열을 선언할 때에 비해서 갯수를 적어주는 [ ] 가 하나 늘었을 뿐입니다. 작성 예를 들어보면 float a[10][20] 와 같이 작성해 주면 됩니다. 그리고 만들어진 변수의 갯수는 10 X 20 = 100 개 입니다. 이렇게 갯수를 2개 입력시킴으로써 많은 양의 배열을 편리하게 만드는 것입니다. 


 초기화 또한 기존의 배열과 다르지 않습니다. 초기화 식은 다음과 같습니다.

단지 { } 를 더 써줌으로써 어디에 포함되는지 나타내는 것입니다.  물론 1차원과 같이 이런방식도 가능합니다.

이렇게 적어준다면 알아서 컴파일러가 [3][4] 구나 라고 인식을 합니다. 그런데 여기서 중요한 것은 두번째 갯수는 꼭 적어주어야 한다는 것입니다. 이것은 배열의 내부 처리문제 때문인데 자세한것은 나중에 메모리 주소를 참조하는 포인터라는 것을 배우고 알아보도록 하겠습니다. 


 또 그냥 두개의 {} 없이 1차원 쓰듯이 사용할 수 도 있습니다. 그리고 배열의 순서대로 하나하나 초기화 됩니다. (위에 표 참고, 저 순서대로 초기화됨)

그리고 만약 배열의 총 갯수 만큼 인수를 적어주지 않는다면 적어주지 않은 인수는 모두 0으로 초기화됩니다. 이것은 1차원 배열과 같죠

 

다 차원 배열의 두번째 - 3차원 배열 이상 


 다차원 배열을 만드는데 제약은 없습니다. int ar[1][2][3][4][5][6][7][8][9]..... 이렇게 만들어도 됩니다. 또한 사용 방법또한 이차원 배열과 같습니다. 그런데 삼차원 이상의 배열은 거이 사용하지 않으므로 상세한 설명은 이차원까지만 하도록 하겠습니다. 다차원 배열은 다 같은 방식으로 사용되므로 똑같이 사용하시면 됩니다.


 지금까지 다차원 배열까지 알아보았습니다. 이렇게 배열은 변수의 집합으로 되어진 자료구조 입니다. 때문에 필요에 따라 맞춰서 사용하면 됩니다. 정말로 그림 자체를 2차원 배열로 표현해서 그릴 수도 있는 것입니다. 배열의 활용법은 무궁무진하니 생각하시는 그대로 모두 사용하시기 바랍니다 .