학생들의 성적 점수를 읽어들여서 컴퓨터의 기억공간에 저장시킨다고 생각해보자. 지금까진 다룬 변수는 단지 한 개의 값만을 저장할 수 있었다. 따라서 학생 수가 10명이면, 10개의 변수가 필요할 것이다.

다음은 학생 수가 5일 때, 성적을 읽어들이는 함수이다. readScore1()은 한 개의 scanf()문을 사용하여, 한꺼번에 5개의 성적을 읽어들인다. 반면에, readScore2()는 사용자에게 프롬프트를 제시하고, 한 개씩 성적을 읽어들인다. 두 번째 버전이 사용자에게 친숙한 인터페이스를 제공할 것이다.


학생 수가 100명, 100명이면, 어떻게 할 것인가? 100개, 100개의 변수를 선언해서 사용할 것인가? 어느 버전도 적절하지 않을 것이다.

readScore2()의 코드를 자세히 살펴보면, 성적을 읽어들이기 위해서 printf()와 scanf()가 반복적으로 사용되는 것을 알 수 있다. 6주차 강의의 1장에서 다루었듯이, 이와 같이 반복되는 코드는 반복 구조를 사용하여 효과적으로 표현될 수 있을 것 같다. 그러나 scanf()에서 사용되는 변수이름이 모두 달라서 반복 구조를 사용하는 것이 어렵다.

readScore()의 두 버전에서 사용되고 있는 5개의 변수 s1, s2, s3, s4, s5를 생각해보자. 이들 변수에 저장되는 값은 성적 점수이고, 따라서 값의 타입, 범위, 사용 용도 등이 모두 동일하다는 것을 알 수 있다.

C 언어는 이와 같이 같은 종류의 데이터 항목들에 대해서 동일한 변수 이름을 부여하면서도, 데이터 항목별로 처리할 수 있는 방법을 갖는 배열의 데이터 구조를 제공한다. 배열의 데이터 구조는 유사한 데이터들을 다루는데 매우 용이한 구조여서, C 언어뿐만 아니라 다른 대부분의 고급 언어에서도 제공되고 있다.

배열(array)은 데이터 항목들의 집합으로, 다음 두 가지의 특징을 갖는다.

이것은 배열에 포함된 데이터 항목들을 순서대로 셀 수 있어야 한다는 것을 의미한다. 즉, 첫 번째 항목, 두 번째 항목, 세 번째 항목 등.

이것은 배열에 속한 모든 데이터 항목들은 동일한 타입을 가져야 한다는 것을 의미한다. 따라서 여러분은 정수 값들만을 포함한 배열, 실수 값들만을 포함한 배열을 생각할 수 있지, 정수와 실수가 혼합되어 있는 배열은 허용되지 않는다.

위의 관점으로부터 앞으로, 배열을 순서대로 나열되어 있는 상자들의 집합으로 생각한다. 여기서 각 상자는 배열에 속한 한 개의 데이터 항목을 포함한다. 배열에 속한 각 데이터 항목을 원소(element)라 부른다. 다음은 5개의 원소를 갖는 배열을 보여준다.


C 언어에서 배열은 다음 두 가지의 속성을 갖는다.

   

1. 원소의 타입: 이것은 배열의 원소에 저장될 수 있는 값의 타입을 의미한다.
2. 배열 크기: 이것은 배열이 포함하는 원소의 개수를 의미한다.

 

 

여러분은 C 프로그램에서 배열을 생성하기 위해서, 배열 원소의 타입과 배열 크기를 알려야 한다.

 


top으로... 다음페이지로.. home으로..