배열은 일반적인 변수와 다르게 여러 개의 값을 저장할 수 있다. 여러 개의 변수가 모여서 배열을 이룬다.

배열은 다음과 같이 선언할 수 있다.

int arr[4];

위 코드에는 배열을 이루는 요소의 자료형, 배열의 이름, 배열의 길이 이다. 따라서 위 코드의 의미는 'int형 변수 4개로 이뤄진 arr이라는 이름을 갖는 배열을 선언한다.' 이다. 이 형식을 갖추어 다양한 자료형과 다양한 길이의 배열을 선언할 수 있다.

 

배열은 다음과 같이 배열 이름 뒤의 대괄호([]) 안의 인덱스 값으로 접근할 수 있다. 인덱스 값은 0부터 시작한다. 배열의 길이가 3일 경우 인덱스 값은 2까지 있다.

#include <stdio.h>

int main(void)
{
    int arr[3];
    int sum = 0;

    arr[0] = 10, arr[1] = 30, arr[2] = 20;

    for(int i = 0; i < 3; i++)
        sum += arr[i];
    
    printf("배열 요소에 저장된 값들의 합 : %d\n", sum);
    return 0;
}

//output : 배열 요소에 저장된 값들의 합 : 60

위 코드는 크기가 3인 배열에 값들을 저장하여 배열의 값들의 합을 구하는 코드이다. 배열의 모든 요소는 반복문을 활용하여 순차적으로 접근 가능하다는 것을 알 수 있다.

 

배열도 기본 자료형 변수들과 마찬가지로 선언과 동시에 초기화하는 것이 가능하다.

다음 코드와 같이 중괄호 내에 초기화 할 값들을 나열하면 해당 값들이 순서대로 저장된다.

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

위와 같이 초기화 리스트가 사용된 경우 배열의 길이정보를 생략할 수 있다. 

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

위 코드의 경우 배열의 길이정보 5가 자동으로 채워진다.

int arr[5] = {1,2};

위 코드의 경우 배열의 길이는 5이지만 초기화할 값은 2개밖에 존재하지 않는다. 위와 같은 경우 순차적으로 값을 채우고 채울 값이 존재하지 않는 요소들은 0으로 채워진다. 위의 경우 배열의 값은 1,2,0,0,0 과 같다.

 

#include <stdio.h>

int main(void)
{
    int arr1[5] = {1,2,3,4,5};
    int arr2[ ] = {1,2,3,4,5,6,7};
    int arr3[5] = {1,2};

    printf("arr1의 크기 : %d\n", sizeof(arr1));
    printf("arr2의 크기 : %d\n", sizeof(arr2));
    printf("arr3의 크기 : %d\n", sizeof(arr3));

    int ar1Len = sizeof(arr1) / sizeof(int);
    int ar2Len = sizeof(arr2) / sizeof(int);
    int ar3Len = sizeof(arr3) / sizeof(int);

    for(int i = 0; i<ar1Len; i++)
        printf("%d ", arr1[i]);
    printf("\n");
    for(int i = 0; i<ar2Len; i++)
        printf("%d ", arr2[i]);
    printf("\n");
    for(int i = 0; i<ar3Len; i++)
        printf("%d ", arr3[i]);
    printf("\n");

    return 0;
}
/* output : 
arr1의 크기 : 20
arr2의 크기 : 28
arr3의 크기 : 20
1 2 3 4 5       
1 2 3 4 5 6 7   
1 2 0 0 0
*/

sizeof로 배열의 크기를 반환하면 바이트 단위로 반환된다. 따라서 배열의 길이를 계산하려면 int 바이트수만큼 나눠줘야 한다.

'Language > C, C++' 카테고리의 다른 글

[C] 포인터 변수  (0) 2020.12.16
[C] 1차원 배열(2)  (0) 2020.12.14
[C] 재귀함수  (0) 2020.12.10
[C] register 변수  (0) 2020.12.10
[C] static 변수  (0) 2020.12.10

+ Recent posts