티스토리 뷰

C

c언어 배열

루우지 2018. 7. 22. 21:51

1. 배열의 선언과 사용

- 동일한 자료형을 저장할 저장공간이 많이 필요한 경우 일일이 변수를 선언하는것을 비효율적이다. 이때 배열을 사용하여 대체할수 있다.

배열을 사용하기 위해서는 선언을 먼저 해야한다. 배열의 선언은 간단하다. 요소의 자료형에 이름을 붙이고 필요한 요소 수를 표시한다.


int ary[5];


int = 요소 형태

ary = 배열명

[5] = 요소 개수


 

#include<stdio.h>


int main(void)

{

int ary[5];


ary[0] = 10;

ary[1] = 20;

ary[2] = ary[0] + ary[1];

scanf("%d", &ary[3]);


printf("%d\n", ary[2]);

printf("%d\n", ary[3]);

printf("%d\n", ary[4]);


return 0;

}


INT형 변수 5개를 하나씩 선언하는 것과 전체 저장 공간의 크기는 같다. 그러나 메모리할당되는 방식에는 차이가 있다. 변수를 선언하면 각 변수는 독립적인 저장공간을 갖고 각각의 이름으로 사용되는데

int a, b, c, d, e;
a(4byte), b(4byte), c(4byte), d(4byte), e(4byte)


반면에 배열은 저장공간이 연속으로 할당되어 배열명이 전체 공간의 이름이 된다.

int ary[5]; // 메모리 공간이 연속적으로 할당되며 이름은 하나다.

ary(20byte)


int형 변수의 크기가 4바이트이므로 5개를 연속으로 할당하면 총 20바이트를 할당된다. 배열의 나누어진 조각을 배열 요소라 하는데, 각각의 배열 요소는 int형 변수와 똑같이 쓰인다. 배열 요소는 배열명에 첨자(index)를 붙여 표현하며 첨자는 0부터 시작한다.


ary[0], ary[1], ary[2], ary[3], ary[4]



배열을 선언할 때와 배열 요소를 사용할때 대괄호 안의 숫자는 의미가 다른다. 선언할 때는 배열 요소의 전체 개수를 표시하며, 사용할 때는 각 요소가 ㅁ배열에서 몇 번째에 있는지 의미한다. 이값이 첨자며 첨자를 사용할 때는 다음 내용을 반드시 지켜야한다.


배열의 첨자는 0부터 시작하므로 최대 '배열 요소 수 -1'까지 사용가능하다. 

-> 배열의 ary 크기가 5일때 ary[5]를 사용하면? compile error

배열의 요소를 사용할때 첨자의 사용 범위를 벗어나면 그 결과를 예측할 수 없다. 배열에 할당된 영역을 벗어난 메모리를 사용하므로 침범함 영역이 어떤 용도에 사용되느냐에 따라 결과가 달라진다. 







2. 배열의 초기화

- 변수와 마찬가지로 배열도 최초 할당된 저장공간에는 쓰레기값이 있다. 배열이 선언과 동시에 원하는 값을 갖도록 하려면 초기화를 해야 한다.


배열은 중괄호로 묶어서 초기화한다.


단, 반드시 선언과 동시에 초기화해야하며, 선언하고 난 후에 값을 저장하려면 배열 요소에 하나씩 값을 대입해야한다.


int main(void)

{

int ary1[5] = { 1,2,3,4,5 };

int ary2[5] = { 1,2,3 };

int ary3[] = { 1,2,3 };

double ary4[5] = { 1.0, 2.0, 3.0, 4.0, 5.4 };

char ary5[5] = { 'a','b','c','d','e' };


ary1[0] = 10;

ary1[1] = 20;

ary1[2] = 30;

ary1[3] = 40;

ary1[4] = 50;


return 0;

}


초깃값은 첫 번째 요소부터 차례로 초기화된다. ary2의 경우 초깃값이 배열 요소 수보다 적은 경우인데 이대는 다음의 규칙을 따른다

왼쪽에서 차례로 초기화되고 남는 배열의 요소는 모두 0으로 채운다.

이런 자동초기화 기능을 사용하면 배욜 요소 수가 많아도 모든 요소를 쉽게 0으로 초기화 가능하다.