소프트웨어/C 언어

[C언어]24. 가장 기초적인 자료구조, 배열에 대하여 알아보자 -1- ( 배열이란 )

리습 2013. 6. 12. 08:00


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


컴퓨터가 어떤 작업을 하기 위해선 작업공간인 '변수'가 필요했고 C언어에서 이러한 변수를 만드는 방법은' double a '와 같이 변수의 형태와 이름을 적어주는 것이였습니다.  그런데 이 방법은 매우 편리하고 단순해서 좋아보이지만 한가지 약점이 있습니다. 여러개의 공간을 만들기 힘들다는 것이죠. 예를 들어 한 학교 전체학생의 점수를 저장하고 계산을 하기 위한 프로그램을 만들다고 합시다. 그렇다면 우선 변수의 공간이 학교 학생 만큼 필요할 것입니다. 선언해보도록 하죠. 


 코드

 char a1, a2, a3, a4, a5, a6, a7, a8, a9, a10, a11, a12, a13, a14, a15;

 char b1, b2, b3, b4, b5, b6, b7, b8, b9, b10, b11, b12, b13, b14, b15;

 char c1, c2, c3, c5, c5, c6, c7, c8, c9, c10, c11, c12, c13, c14, c15;

                                           .....

 char z1, z2, z3, z4, z5, z6, z7, z8, z9, z10, z11, z12, z13, z14, z15;


변수의 공간만 만들었을 뿐인데 벌써 지칩니다. 사실 저 코드를 작성하는데도 a11에서 부터 쓰고싶지가 않았습니다. 변수의 공간을 필요한 만큼 선언해야 하기 때문에 매우 고생을 해야하기 때문이죠. 학교 학생수 정도라면 어떻게 작성이 가능할지 모르지만 전국민 수 만큼 변수공간을 만들어야한다면 저런식의 방법도 무리일 것 입니다. 그래서 만들어진 변수 선언 방식이 '배열'입니다. 


  배열이란.

 배열은 변수가 일자로 쭉 연결되어있는 메모리 저장 방식입니다. 실제 메모리 공간에서도 쭉 연결되어서 같이 존재하게 됩니다. 또한 배열은 공간을 선언할시 여러개의 공간을 '한번에' 선언할 수 있기 때문에 앞서 들었던 예와 같이 많은 변수를 선언할 때 매우 편리합니다. 


 배열의 선언 방식은 다음과 같습니다.


선언방식은 우리가 종전에 쓰던 변수와 차이가 없습니다. 단지 변수의 이름 뒤에 몇개를 선언 할것인지 갯수를 적어주는 것이지요. 예를들어 10개의 a라는 int 변수를 만들고 싶다면 int a[10] 이라고 적어주면 되는 것입니다. 그렇다면 a는 배열의 이름이 되는 것이며 []는 배열의 번호가 되어 a[0], a[1], a[2]...., a[9]라는 10개의 변수가 만들어지는 것입니다. 


햇갈리실지도 모르니 간단하게 다시 정리해보겠습니다. int a[5]는 a라는 배열명을 가지는 int 변수 5개를 선언하는 것이며 이때 만들어진 배열은 int a[0], int a[1] , int a[2], int a[3], int a[4] 와 같다는 것입니다. 위의 예를 배열로 선언하면 다음과 같습니다.


 코드

 

 int a1, a2, a3, a4, a5, a6, a7, a8, a9, a10;

 int b1, b2, b3, b4, b5, b6, b7, b8, b9, b10;

                     ....

 int z1, z2, z3, z4, z5, z6, z7, z8, z9, z10;


 int a[10];

 int b[10];

     ...

 int z[10];


왼쪽과 오른쪽을 비교하면 얼마나 오른쪽이 쉽고 단순한지 아실수 있으실겁니다. 


 

 배열이 초기화 


 배열 또한 메모리를 차지하고 있는 변수 즉 공간입니다. 초기화를 하지 않을 경우 쓰레기값이 들어있는 것은 당연하죠. 때문에 배열또한 사용전에 초기화를 해줘야 합니다. 배열을 초기화 하는 방법은 일반 변수와 같습니다. 단지 배열이기 때문에 { } 를 사용한다는것이 차이점이죠. 한번 예를 보도록 하겠습니다.

위와 같은 방식으로 배열을 초기화 하게 됩니다. 위 예시대로라면 a[0] 에는 1이 a[1] 에는 2 가 , a[2] 에는 3 이 , a[3] 에는 4 가 a[4] 에는 5 가 대입됩니다. 


 또한 모든 인수를 적어줄 필요 없이 초기화 하고싶은 값만 초기화 할수도 있습니다. 이 때에는 앞에서부터 차곡차곡 변수에 값을 대입합니다.

 이렇게 초기화 할경우 a[0] = 1 , a[1] = 2 , a[2] = 0 , a[3] = 0 , a[4] = 0 이 대입됩니다. 여기서 우리는 중요한것을 알 수 있습니다. 배열을 초기화할 때 몇몇 변수에만 값을 넣어준다면 나머지 변수들은 0으로 초기화 된다는 것입니다. 그리고 햇갈리시면 안되는 것은 초기화 하지 않을 땐 배열에는 쓰레기값(알수없는 값) 이 들어있다는 것입니다.


 배열에 미리 갯수를 알려주지 않아도 배열은 만들수 있습니다. 이때는 다음과 같은 방법을 사용합니다.

이런식으로 작성한다면 컴파일러가 알아서 1, 2, 3, 4, 5 로 초기화된 5개의 배열을 만들게 됩니다. 즉 맨위의 int a[5] = { 1, 2, 3, 4, 5 } 와 같은식이 되는 것입니다. 


 이렇게 배열이 무엇이고 어떻게 선언하며 왜 생겼는지 알아보았습니다. 정리하면 배열은 메모리 공간에 일렬로 정렬되어있는 변수들의 집합 입니다. 하지만 아직 우리는 구체적으로 배열을 어떻게 사용할것인지, 어떻게 사용하는지에 대해선 아직 설명하지 않았습니다. 다음 강의때 배열의 사용에 대하여 알아보도록 하겠습니다.