2015년 4월 20일 월요일

C/C++ 배열의 선언과 초기화 (part 1 / 2)

 배열을 설명하기 위해서 다음 표에 기록되어 있는 5명 학생의 몸무게를 데이터로 저장하는 문제로 설명을 시작해 보겠다.

[표 1] 다섯 명의 키 데이터
번호
1
2
3
4
5
키(cm)
170
169
178
169
164

이 5명의 키를 입력하기 위해서 다음과 같이 int형 변수 5개를 각각 사용할 수 있을 것이다.

int iHeight1 = 170;
int iHeight2 = 169;
int iHeight3 = 178;
int iHeight4 = 159;
int iHeight5 = 164;

이렇게 데이터를 저장하여 관리하여도 전혀 문제가 없지만 여러 가지 이유로 비효율적이다.

 이와 같이 동일한 성질의 데이터들을 하나의 이름으로 다루기 위해서 배열(array)이라는 자료형이 마련되어 있다. 배열은 같은 자료형의 데이터들을 연속적인 메모리 공간에 차례대로 저장하는 것이다.

 C/C++ 언어에서 배열을 선언하는 문법은 다음과 같다.

자료형 배열명[배열크기];

앞에서 예를 든 다섯 명의 키를 저장하는 배열을 선언하기 위해서 다음과 같이 하면 된다.

int iaHeights[5];

여기에서 iaHeights 는 배열의 이름(배열명)이며 배열의 요소(element)의 자료형은 int형이고 배열의 크기는 5이므로 이 배열에는 최대 다섯 개의 int형 값을 저장할 수 있는 것이다.

[표 2] iaHeights 배열의 메모리 구조
인덱스
0
1
2
3
4
요소
int형
int형
int형
int형
int형

 배열 변수를 선언하였다면 이제 다음과 같이 초기화할 수 있다.

iaHeights[0] = 170; //첫 번째 데이터 초기화
iaHeights[1] = 169; //두 번째 데이터 초기화
iaHeights[2] = 178; //세 번째 데이터 초기화
iaHeights[3] = 159; //네 번째 데이터 초기화
iaHeights[4] = 164; //다섯 번째 데이터 초기화

여기서 '배열명[0]' 은 배열의 첫 번째 요소를 지칭한다. 대괄호 [...] 안의 숫자는 배열의 인덱스(index)라고 한다. 인덱스는 1부터가 아니라 0부터 시작하는 것에 유의해야 한다. 배열의 요소는 일반 변수와 동일하게 읽을 수 있으며 갱신할 수 있다.

 다섯 명의 키를 처리하기 위해서 다섯 개의 별개의 변수를 각각 사용하는 것보다 이렇게 배열을 이용하는 것이 훨씬 효율적인데 이는 데이터의 일관성을 유지할 뿐만 아니라 반복문을 사용하기에 용이해서 그렇다.

 이제 이 다섯 명의 키를 화면에 출력하는 프로그램을 작성해 보자.

#include <stdio.h>
int main()
{
   int iaHeights[5]; //배열 선언

   iaHeights[0]=170;
   iaHeights[1]=169;
   iaHeights[2]=178;
   iaHeights[3]=159;
   iaHeights[4]=164;

   for (int k=0; k<5; k++) {
       printf("%d:%d\n",k,iaHeights[k];
   }
}

댓글 없음:

댓글 쓰기