Skip to main content
C Array

C언어 배열 (Array)

배열은 구조화된 데이터 타입(Structured data types)이라고도 합니다. 다시 말해 데이터 타입이 같은 값들이 정의된 크기만큼 연속된 메모리 공간에 차례로 저장되어 있습니다.

여기서 주의 깊게 봐야 할 부분은 다음과 같습니다.

  • 정의된 크기: 배열을 사용하기전 크기를 정의해야 합니다.
  • 차례로 저장: 값들이 차례로 저장됩니다.
  • 같은 데이터 타입의 값: 저장되는 값들의 데이터 타입은 같습니다.

배열은 C언어에서 다양한 곳에 사용됩니다. 특히 일관된 데이터를 저장할 때 자주 사용됩니다. 예를 들어 고용인의 이름을 저장할 때나 학생들의 성적 등을 저장할 때 사용됩니다.

배열은 구조체(structure), 리스트(lists), 큐(queue), 트리(trees) 등과 함께 쉽게 데이터를 저장하고 표현하는 방법을 제공합니다. 또한, 일차원 배열뿐만 아니라 이차원, 삼차원까지 표현 가능합니다.

배열 선언과 정의

변수와 같이 배열도 사용하기 전 선언해야 하며 정의를 하여 메모리를 할당해야 합니다.

data-type variable-name[size];

/* 배열 선언과 정이 예제 */

int arr[10];

int로 배열을 선언하고 즉 저장될 값들이 int라는 의미입니다. arr는 배열의 이름이고 10은 배열의 크기입니다. 이것을 메모리상으로 표현하면 다음과 같습니다.

what is array

배열의 이름은 내부적으로 메모리상의 배열 시작 주소를 가리키고 있습니다. 또한, 인덱스는 0부터 시작하여 size-1로 끝납니다.

위의 예제에서 배열의 가장 처음은 arr[0]이고 끝은 arr[9]입니다.

배열 초기화

배열은 선언과 정의가 된 후에는 항상 초기화해 주어야 합니다. 그렇지 않으면 임의 값(garbage value)이 저장되어 있습니다. 배열의 초기화는 컴파일 시 혹은 프로그램 실행 시 됩니다.

컴파일 시 배열의 초기화

컴파일 시 초기화 방법은 아래의 예제와 같이 일반 변수를 초기화하는 방법과 같습니다.

data-type array-name[size] = { list of values };

/* 예제 */
int marks[4]={ 67, 87, 56, 77 };    // 정수 배열

float area[5]={ 23.4, 6.8, 5.5 };   // 실수 배열

int marks[4]={ 67, 87, 56, 77, 59 }; // 컴파일 에러 발생

여기서 중요한 점은 배열의 크기보다 큰 값으로 초기화할 때 컴파일 에러가 발생합니다.

#include<stdio.h>

void main()
{
    int i;
    int arr[] = {2, 3, 4};      // 컴파일시 초기화
    for(i = 0 ; i < 3 ; i++) 
    {
        printf("%d\t",arr[i]);
    }
}

OUTPUT
2 3 4

선언과 초기화를 같이할 때 배열의 크기가 정의되어 있지 않으면 초기화 값으로 크기가 결정됩니다.

프로그램 실행 시 배열 초기화

프로그램 실행 시 scanf() 함수를 사용하여 배열을 초기화할 수 있습니다. 대부분 이러한 방법은 큰 배열을 초기화할 때나 사용자의 입력값으로 배열을 초기화할 때 사용합니다.

#include<stdio.h>

void main()
{
    int arr[4];
    int i, j;
    printf("배열 값을 입력하세요.");
    for(i = 0; i < 4; i++)
    {
        scanf("%d", &arr[i]); //프로그램 실행 시 배열 초기화
    }
    for(j = 0; j < 4; j++)
    {
        printf("%d\n", arr[j]);
    }
}

2 차원 배열 (Two dimensional arrays)

C언어는 다차원 배열을 지원합니다. 다차원 배열 중 가장 기본은 이차원 배열입니다. 일차원 배열과 마찬가지로 이차원 배열의 인덱스도 0으로 시작합니다. 

이차원 배열은 다음과 같이 선언됩니다.

data-type array-name[row-size][column-size] 

/* 예제 */
int a[3][4];

int a[3][4]는 아래와 같은 구조로 생각하시면 됩니다. 실질적으로 메모리상에는 일차원적으로 저장되지만 이해되기 쉽게 아래와 같이 3행과 4열로 구성된 배열로 생각하면 됩니다.

이차원 배열도 선언과 초기화를 동시에 할 수 있습니다. 

int arr[][3] = {
    {0,0,0},
    {1,1,1}
};

여기서 주의해야 할 점은 초기화를 동시에 할 때 크기를 정의하지 않아도 되지만 이차원 배열일 경우에는 열에 해당하는 부분은 항상 정의해야 합니다. 그렇지 않으면 컴파일 타임 에러가 발생합니다.?

이차원 배열 프로그램 실행 시 초기화 예제

#include<stdio.h>

void main()
{
    int arr[3][4];
    int i, j, k;
    printf("값을 입력하세요.");
    for(i = 0; i < 3;i++)
    {
        for(j = 0; j < 4; j++)
        {
            scanf("%d", &arr[i][j]);
        }
    }
    for(i = 0; i < 3; i++)
    {
        for(j = 0; j < 4; j++)
        {
            printf("%d", arr[i][j]);
        }
    }
}
<< 다음 혼자 공부하는 C언어 이전 >>

댓글 남기기

이메일은 공개되지 않습니다. 필수 입력창은 * 로 표시되어 있습니다