본문 바로가기
쿤즈 Dev/C

[C언어] 배열(Arrays) 사용 하는 방법

by :)Koon 2020. 10. 26.

앞서 알아본 C언어의 사용법은 하나의 변수에 하나의 값을 저장하는 방법이었습니다. 다양한 변수들이 존재하지만 각 변수들에 하나의 값을 저장하고 있다보니 규칙적이거나 저장하려는 값이 많아지면 변수의 수가 늘어나고 관리가 어려워질 것입니다. 그래서 C언어에서는 하나의 변수 이름에 여러개의 값을 저장하기 위해 배열(Arrays) 이라는 것을 만들었습니다.

 

 

오늘 포스팅에서는 배열에 대해서 알아보고 사용하는 방법을 알아보도록 하겠습니다.


배열이란

배열은 하나의 변수 이름에 여러개의 값을 저장할 수 있는 문법의 형태입니다. 즉, 하나의 변수를 이용해서 다수의 값을 저장해놓고 필요한 값을 언제든지 선택해서 제거하거나 추가해서 저장할 수 있습니다.

배열은 위와같은 형태로 존재합니다. 위 배열은 크기가 5인 배열입니다. 그리고 이 배열의 이름은 임의로 지정할 수 있습니다. 이렇게 지정된 이름을 array 라고 했을때, 각 배열의 값에 접근할 때에는 arrays[0], arrays[1], ... , arrays[4] 로 접근 할 수 있습니다. 조금 더 자세히 알아보겠습니다.


배열을 선언하는 방법

배열은 앞서 변수, 상수와 같이 선언하는 방법은 동일합니다. 다만 사용할 배열의 크기를 지정해 주어야 하며, 반드시 같은 자료형으로만 선언이 가능합니다.

dataType arrayName [ arraySize ];

위 선언 방법에서 dataType은 변수 및 상수를 지정할때 사용한 자료형입니다. 대표적으로 char, int, float, double 등이 있습니다. 이러한 자료형들로 선언하면 하나의 arrayName 으로 지정된 arraySize 개의 자료형을 사용할 수 있게 선언이 됩니다.

 

arrayName은 프로그래머가 임의로 정하는 이름입니다. 변수의 이름과 같이 만들어 주시면 됩니다. 다만 변수는 1개지만 배열은 여러개를 묶어놓은 것이기 때문에 이름을 지어줄때 arrName 혹은 names 와 같이 알아 볼 수 있게 만들어 주는 것이 좋습니다. 프로그램이 길어지면 변수도 많아져서 알아보기 힘들기 때문이빈다.

 

arraySize 는 배열의 크기입니다. 배열의 크기는 반드시 자연수(1, 2, 3, ... , n) 로 지정해 주어야 합니다.

 

예를들어서 char names[5]; 라고 선언했다면 char 자료형으로 크기가 5인 배열이 names 라는 이름으로 선언됨을 뜻합니다. 


배열에 접근하는 방법

배열을 선언하였다면 실제로 값을 저장하고 지울수 있도록 접근하는 방법을 알아야 합니다. 위에서 잠깐 언급했지만 조금 더 자세하게 다뤄보도록 하겠습니다.

위와 같이 char names[5]; 로 배열을 선언했다고 가정하겠습니다. 이 배열은 char 자료형으로 크기가 5인 배열입니다. 배열의 이름은 names입니다. 따라서 names 배열은 char가 1byte 의 크기를 가지므로 총 5byte의 크기를 가지는 배열이 되는 것입니다.

 

2020/08/04 - [쿤즈 Dev/C] - [C언어] 데이터 타입(Data Types) 과 함께 변수 선언하기

 

[C언어] 데이터 타입(Data Types) 과 함께 변수 선언하기

앞선 포스팅에서 알아본 내용은 키워드와 식별자, 변수와 상수 입니다. C언어에서 정해져 있는 키워드들은 무엇이며 사용할 수 있는 식별자들을 이용해서 변수와 상수를 만드는 방법까지 알아��

koonsland.tistory.com

이때 각 배열의 값에 접근하는 방법은 변수명 뒤에 숫자를 붙여서 접근해 주는 것입니다. 단, 시작은 0입니다. 첫 번째 배열은 names[0], 마지막 배열은 크기가 5이기 때문에 names[4] 로 접근이 가능합니다.

 

그럼 다른 예제를 보겠습니다.

다음과 같이 데이터 타입이 int 인 자료형으로 크기가 4인 배열 ages 를 선언했다고 가정하겠습니다.

int 자료형은 크기가 4bytes 입니다. 따라서 1byte 4개를 한 묶음으로 생각하시면 됩니다. 그리고 이렇게 4개가 선언되었으므로 총 16bytes 크기를 ages 변수가 가지게 됩니다.

 

이렇게 선언된 ages 의 첫번째 배열에 접근하기 위해서는 동일하게 ages[0], 마지막은 ages[3] 으로 접근할 수 있습니다.


배열 선언 이후 초기화 방법

배열을 선언할 경우 아무 값도 할당하지 않아도 되지만 특정 값을 초기화를 해줘야 하는 경우도 발생합니다. 이때 배열에는 여러값들이 들어갈 수 있기 때문에 기존 변수와는 다르게 값을 초기화 해줍니다.

 

배열을 초기화 하는 방법은 중괄호({...})를 사용합니다. 만약 위와같이 ages[4] 라는 배열에 4개의 정수를 초기화 하기위해서는 다음과 같이 사용합니다.

int ages[4] = {15, 35, 23, 10}; // 배열의 크기를 정하고 값을 초기화
int ages[] = {15, 35, 23, 10}; // 배열의 값을 초기화 하기 때문에 크기를 별도로 설정 하지 않아도 됨

첫 번째 방법은 배열의 값을 정해놓고 값을 초기화 하는 일반적인 방법입니다.

두 번째 방법은 초기화 할 배열이 정해져 있기 때문에 크기를 설정해 주지 않아도 됩니다. 이는 실행파일로 만드는 컴파일 과정을 거칠때, 컴파일러가 자동으로 크기를 정해주기 때문입니다.

 

이렇게 초기화한 배열은 ages[0]=15, ages[1]=35, ages[2]=23, ages[3]=10 의 값으로 초기화가 됩니다.

 


배열의 값 변경하는 방법

배열을 선언하였고 초기화까지 해서 정해진 값을 넣었습니다. 그런데 프로그래밍을 하다보면 변수의 값을 변경해줘야 할 경우가 발생합니다. 이 경우에는 변수값을 변경하는것과 동일하게 값을 변경해 줄 수 있습니다.

 

예를들어서 위의 예제처럼 ages 배열의 3번째 값을 30으로 변경하고자 할때에는 ages[2] = 30; 을 사용 하면 됩니다. 항당 배열의 번호는 n-1 번째라는 점을 기억해 주세요.

 

지금까지 배열의 문법과 선언방법, 초기화 방법, 그리고 마지막으로 값을 변경하는 방법까지 알아보았습니다. 그럼 이제부터 소스코드를 통해서 정리해보도록 하겠습니다.


소스코드1 printarray.c

#include <stdio.h>

int main(int argc, const char* argv[]) {
    // insert code here...
    int ages[4] = { 15, 35, 23, 10 };
    int i;

    for (i = 0; i < sizeof(ages) / sizeof(int); i++)
    {
        printf("ages[%d] = %d\n", i, ages[i]);
    }

    return 0;
}

결과1

ages[0] = 15
ages[1] = 35
ages[2] = 23
ages[3] = 10

소스코드1은 배열 변수인 ages의 크기를 4로 선언하고 초기화 했습니다. 초기화값은 ages[0] = 15, ages[1] = 35, ages[2] = 23, ages[3] = 10 입니다.

 

이렇게 초기화된 값들이 정상적으로 저장되었는지 보기 위해서 for 반복문을 통해서 화면에 출력하였습니다. 이때 반복되는 값의 계산을 하는 부분이 낯설게 느껴질 수 있습니다. 어떻게 계산되는지 알아보겠습니다.

 

ages는 int 자료형입니다. 따라서 4bytes 씩 4개의 값을 저장 할 수 있는 배열입니다. 이를 그대로 이용하면 됩니다. 총 bytes 의 크기를 구하고 어떠한 자료형인지를 나눠주면 반복 횟수를 구할 수 있습니다.

 

sizeof(ages) 는 16bytes 가 나옵니다. 그리고 sizeof(int) 는 4bytes 입니다. 따라서 16 / 4 = 4 가 나오고 반복 횟수가 되는 것입니다. 나머지는 기본 표준 출력함수인 printf() 를 이용해서 화면에 값을 출력합니다.


소스코드2 scanfarray.c

#include <stdio.h>

int main(int argc, const char * argv[]) {
    // insert code here...
    int num[5];
    int i;
    
    printf("숫자 5개를 입력하세요.\n");
    for(i=0; i<5; i++)
    {
        scanf_s("%d", &num[i]);
    }
    
    printf("입력한 숫자입니다.\n");
    for(i=0; i<5; i++)
    {
        printf("num[%d] = %d\n", i, num[i]);
    }
    
    return 0;
}

결과2

숫자 5개를 입력하세요.
1 2 3 4 5
입력한 숫자입니다.
num[0] = 1
num[1] = 2
num[2] = 3
num[3] = 4
num[4] = 5

이번에는 표준 입력함수를 이용해서 정수를 받아서 배열에 값을 저장하고 출력하는 프로그래밍을 해보도록 하겠습니다.

먼저 표준 입력함수인 scanf_s() 를 사용합니다. (scanf 를 사용하지 않는 이유는 아래 링크에서 확인해 주세요.)

 

2020/08/06 - [쿤즈 Dev/C] - [C언어] 표준입력 표준출력 사용하기 (첫 프로그래밍 시작!)

 

[C언어] 표준입력 표준출력 사용하기 (첫 프로그래밍 시작!)

지금까지 C언어를 프로그래밍하기 위해서 여러가지 요소들을 확인해 보았습니다. 키워드와 식별자, 변수와 상수, 데이터 타입까지 이론적인 기초 부분을 알아보았습니다. 앞서 알아본 내용들을

koonsland.tistory.com

 

이때 입력받을 변수 앞에는 반드시 & 기호를 붙여서 사용한다는점 유의해 주시면 됩니다. 입력 받는 방법은 동일합니다. 각 배열의 번호에 접근하여 그 공간에 값을 저장해 주시면 됩니다.

 

출력은 입력과 반대로 진행해 주시면 되며 & 기호는 빼고 사용한다는 점만 기억해 두시면 어렵지 않은 프로그래밍이 될 것입니다.


이번 포스팅에서는 배열(Arrays)에 관해서 알아보았습니다. 배열은 같은 자료형의 여러 값들을 하나의 이름으로 선언하고 번호를 나열하여 저장하는 방법을 사용하는 방법입니다. 자료구조의 가장 기본적인 구조중 하나가 배열이기 때문에 잘 알아두실 필요가 있습니다.

댓글