C언어 배열 (Array)
반응형

배열은 구조화된 데이터 타입(Structured data types)입니다. 즉, 같은 데이터 타입의 값이 정의된 크기만큼 연속된 메모리에 차례로 저장되어 있다는 의미입니다.

C언어의 배열의 정의는 다음과 같습니다.

  • 배열을 사용하기전 크기를 정합니다.
  • 배열의 값은 메모리에 차례로 저장됩니다.
  • 배열의 값은 데이터 타입이 같습니다.

또한, 일차원 배열뿐만 아니라 이차원, 삼차원까지 표현 가능합니다.

배열 선언과 정의

변수와 마찬가지로 데이터 타입과 배열명을 선언합니다. 다른점은 크기를 정합니다.

data-type variable-name[size];

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

int arr[10];

여기서 데이터 타입 int는 배열에 저장될 값들의 데이터 타입입니다. arr는 배열명이고 10은 배열의 크기입니다. 이렇게 선언된 배열은 메모리상에 아래와 같이 저장됩니다. 

배열명은 내부적으로 배열의 시작 주소를 가지고 있습니다. 그리고 배열의 인덱스는 0부터 size-1입니다. 위에 선언한 int arr[10]의 가장 처음은 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언어 이전 >>
반응형

'프로그래밍 > C' 카테고리의 다른 글

C언어 플로우차트 (Flow Chart)  (0) 2019.12.19
C언어 문자열 (String)  (0) 2019.11.08
C언어 포인터 변수 이해  (0) 2019.10.17
C언어 반복문 (Loop)  (0) 2019.09.25
C언어 Switch 조건문 사용법  (0) 2019.09.25