똑같은 자료형으로 많은 수의 변수를 선언하고 사용할 때에는 나열식 표현에 한계가 있다. 따라서 C 언어는 데이터를 그룹으로 묶어서 표현하는 ' 배열 ' (Array) 문법을 사용한다.
short student[20];
은 2바이트 정수형 데이터 20개를 저장할 수 있는 배열을 student라는 변수 이름으로 선언한다는 뜻이다. []에 들어가는 요소 개수는 반드시 숫자 상수로 명시해야 한다.
배열은 그룹으로 묶인 데이터를 하나의 변수로 취급한다.
만약 배열로 선언된 변수 중 특정 위치에 있는 변수에만 값을 대입하고 싶다면 어떻게 할까?
student[1] = 10;
과 같이, 변수 이름[색인(index)] = 값; 이라는 대입 명령문을 사용하면 된다.
#include <stdio.h>
void main()
{
short student[20];
student[1] = 10;
printf("%d\n", student[1]);
}
배열을 선언할 때는 [] 안에 꼭 상수를 적어줘야 한다. 그러나 배열의 특정 요소에 값을 대입할 때는 [] 안에 변수를 사용할 수 있다.
int index = 1;
student[index] = 10;
이렇게 변수를 사용할 수 있다는 것은 반복문과 같은 제어 문법을 함께 사용할 수 있다는 뜻이다.
short student[20], i;
for (i=0; i<5; i++) student[i] = 5;
이 것은 반복문 for을 사용한 문법으로 구성된 짧은 소스코드이다. short student의 요소를 i라는 변수로 놓고, 0,1,2,3,4 요소를 5로 채우고자 할 때 사용할 수 있는 코드라고 볼 수 있다.
이렇게 요소에 변수를 사용하고 반복움ㄴ으로 코드를 구성하면 프로그래밍이 더 편리해진다.
#include <stdio.h>
void main()
{
int test[20], i;
for(i=0; i<20; i++) test[i] = 0;
}
배열로 만들어진 변수 또한 지역 변수이기 때문에, 직접 초기화하지 않는 이상 자동으로 초기화 되지 않는다. 따라서 일정한 값을 대입하여 초기화해서 사용해야한다.
대체로 프로그래머들은 초깃값으로 0을 사용한다.
#include <stdio.h>
void main()
{
short student[20], i;
for(i=0;i<20;i++) student[i] = 0;
student[1] = 10;
printf("%d %d\n", student[1], student[2]);
}
출력값 : 10 0
배열을 초기화 하는 데에 매번 반복문을 사용하는 것도 불편하다. 이런 불편함을 해결하기 위해 배열로 선언한 변수도 일반 변수처럼 초기화하는 방법이 있다.
일반 변수의 초기화와 차이가 있다면 배열은 {}로 묶어 초깃값들을 저장한다는 것이다.
short student[20] = {0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,};
이렇게 {}로 묶어 초깃값들을 저장하면 되지만, 변수가 많을 경우 부담스러워진다.
short student[20] = {0,};
이렇게 쉼표 하나만으로 초깃값을 정리해주면 뒤에 있는 나머지 변수들도 0으로 초기화된다.
#include <stdio.h>
void main
{
short student[20] = {0,};
student[1] = 10;
printf("%d %d\n", student[1], student[2]);
}
출력값 10 0
short data[5] = {3,};
이것의 결과는 {3,0,0,0,0}; 과 같다. 쉼표로 뒷부분을 생략해버리면 이는 0으로 초기화하는 것과 같기 때문에, 배열의 요소가 많은 경우에 0이 아닌 값으로 초기화하고싶다면 반복문을 쓰는 것이 적절하다.
short data[ ] = {1,2,1,2,1};
배열을 선언할 때 [ ]안의 요소 개수를 생략하고 위와 같이 사용할 수도 있다. 이 경우에 { } 안에 나열된 항목이 5개이므로 5개의 저장 공간이 만들어진다.
초기화 문법은 배열 변수를 선언할 때만 사용하자.
student[1] = {5}; (X)
배열에 저장된 요소 값을 읽어오거나 요소 값끼리 연산할 수도 있다.
short data[3];
data[0] = 2;
data[1] = data[0] + 5;
data[2] = data[0] + data[1];
#include <stdio.h>
void main()
{
char data[5] = { 1,2,3,4,5 };
int result = 0, i;
for (i = 0;i < 5;i++) {
result = result + data[i];
}
printf("data 배열의 각 요소의 합은 %d입니다\n", result);
}
배열은 같은 크기의 메모리를 그룹으로 묶어 새로운 크기의 변수를 만들기 때문에 ' 사용자 정의 자료형 ' 이라고 부른다.
char three[3];
이처럼 char형은 1바이트 크기임에도 불구하고 char three[3]이라는 배열을 선언하면 3바이트 자료형이 새롭게 만들어지는 것이다.
따라서, C 문법이 기본으로 제공하는 자료형으로는 표현할 수 없었던 3바이트, 5바이트 크기의 변수도 배열을 사용하면 자유롭게 만들 수 있다.