배열 Array

배열은 동일한 자료형의 데이터들이 여러개 있을 때 사용하면 편하다.

배열의 선언은

자료형 배열이름[배열크기];

이며

int list[10]; 이면 int형을 자료형으로 하는 기억공간 10개가 만들어진다.

 

list[0]  
list[1]  
list[2]  
list[3]  
list[4]  
list[5]  
list[6]  
list[7]  
list[8]  
list[9]  

 

위와 같이 int형 변수가 10개 생성되며, 0~9 까지의 번호를 가진다.

배열의 초기화는 다음과 같이 가능하다

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

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

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

int list[3];
list[0] = 1;
list[1] = 2;
list[2] = 3;

여러 가지 방법으로 배열의 초기화가 가능하다.

문자의 초기화방법은

char ch[] = {'f', 'a', 'l', 'n', 'u', 'x'};

char ch[] = "falinux";

아래는 falinux 문자뒤에 \0 이라는 문자의 끝을 의미하는 null문자가 하나더 들어가서 크기가 하나더 커진다.

 

 

 

다음의 예제를 통해서 배열의 사용을 알아보자

 

#include <stdio.h>


int main()
{
       int iarray[] = {3,4,5,6,7};
       int *p = iarray;
       char carray[] = {3,4,5,6,7};

       printf("%d\n", iarray[3]);
       printf("%d\n", 3[iarray]);
       printf("%d\n", *(iarray+0));
       printf("%d\n", *(iarray+1));
       printf("%d\n",  *p);
       printf("%d\n", *(p+1));
       printf("%d\n", p[1]);
       printf("%d\n", 1[p]);
       printf("%d\n", &carray);
       printf("%d\n", &carray+1);

       return 0;
}

 

array01-1.png

 

<프로그램 설명>

iarray[3]와 *(iarray+3)는 같다. iarray 는 주소이며 *(3+iarray)라고도 쓸 수 있다.

*()가 [] 와 같고 이를 그대로 대입하면 3[iarry]라고 쓸 수 있다.

포인터 변수 p에 iarray  를 담으면 주소값이 들어가므로 *p의 값은 3을 가리킨다.

&carray 주소는 맨처음값 3의 주소이며 & carray + 1을 하게되면 맨끝 7의 다음 번지를 가리킨다. *&에 주의 하자. *carray + 1 은 3+1 로 4이며 *(carray + 1) 은 주소를 자료형의 크기만큼 이동시켜 4가 출력 되는 것이다.