본문 바로가기
c언어

c언어 배열 기초 알아보기

by 개발자 L 2022. 12. 6.
반응형

c언어 배열 기초 알아보기

네 안녕하세요, 이번 포스팅에서는 배열에 대하여 알아보도록 하겠습니다.

사실 배열은 우리가 데이터를 다룰 때 없어서는 안 되는 요소이며,

실제로 프로그래밍을 할 때 정말 많이 쓰입니다.

거의 항상 쓰인다고 봐야죠.

그래서 이번 시간에는 그런 배열에 대하여 하나하나 알아보도록 하겠습니다.

그럼 지금부터 시작하도록 하겠습니다.

 

1. 배열이란?

배열은 동일한 타입의 데이터가 한 곳에 여러개가 저장이 된 장소입니다.

기본적으로 배열은 정수형으로 저장이 되어있어서 정수형 자료형으로 접근을 합니다.

그래서 필요에 따라서 캐스팅(형 변환)을 해주어야 합니다.

그리고 이러한 배열이 필요한 이유는 우리가 한 번에 하나의 데이터만 처리를 하는 게 아니기에,

다수의 데이터가 비슷하거나 같은 특성을 지니고 있다고 한다면 한 번에 처리를 하는 것이 일률적으로 좋겠죠?
그래서 우리가 배열을 쓰는 것입니다.

 

1 - 1. 배열의 특징

배열은 다음과 같은 특징을 가지고 있습니다.

  1. 배열은 연속적인 데이터이기 때문에 연속적인 메모리 공간에 저장이 된다.
  2. 배열은 한 개의 이름을 공유하고, 번호만 다르기 때문에 비슷하거나 관련이 있는, 혹은 같은 범주 내에 있는 데이터를 순서대로 접근하여 처리를 할 수 있다는 장점을 가지고 있다.

 

1 - 2. 배열의 선언

배열 역시 우리가 변수를 선언을 하는 것 처럼 선언을 해야 합니다.

기본적으로 이렇게 씁니다.

int A[10];

변수명은 대소문자 아무거나 써도 되지만,

보통 일반 변수를 선언할 때 소문자를 쓰기 때문에 이와 다르다는 것을 표시하기 위해서 대문자를 자주 씁니다.

이렇게 쓰게되면 A라는 배열 안에 10개의 데이터가 저장이 되어있다는 뜻이 됩니다.

그리고 이 역시 컴퓨터가 새는 것이기 때문에 0번부터 9번까지 저장이 되어 총 10개입니다.

또한, 기본형은 정수형이지만, 다른 자료형으로도 선언이 될 수 있습니다.

float A[23]; // 실수형 배열 선언
char name[40]; // 문자형 배열 선언
char src[15], dst[10]; // 문자열 배열 선언
int index, days[7]; // 일반 변수와 배열을 함께 선언

// #define을 이용하여 상수 선언 후 배열에 적용
#define SIZE 30
int B[SIZE];

이렇게 쓸 수 있습니다.

 

1 - 3. 배열 요소에 접근하기

우리가 배열을 선언을 했다면, 배열 요소에도 접근을 해야 데이터를 다룰 수 있겠죠?
우리가 사용하는 배열은 0번부터 시작하여 (n - 1) 번까지의 번호가 부여가 된다고 그랬습니다.

다시 말하면 10개의 데이터가 들어있는 배열이라 한다면, 0번부터 9번까지 있는 것이지요.

그리고 여기 보이는 0 ~ 9번 까지의 번호를 우리는 '인덱스'라고 부릅니다.

예를 들어서 우리가 A라는 배열에 있는 인덱스 넘버가 3인 데이터에 접근을 하고 싶다면 'A [3]'이라고 입력을 하면 되며,

이 요소들은 우리가 사용하는 변수랑 똑같기 때문에 각각의 요소에 데이터를 저장을 할 수 있습니다.

이런 식으로요.

A[i] = 50; // 변수를 인덱스로 쓸 수 있음.
A[i + 2] = 30; // 수식을 인덱스로 쓸 수 있음.
A[index[3]] = 60; // index[]는 정수배열, 배열 안에 배열을 쓰는 것도 가능함.

그럼 제가 간단한 예제를 들어 한 번 보여드리겠습니다.

#include <stdio.h>

int main()
{
    int a, A[5];

    A[0] = 1;
    A[1] = 2;
    A[2] = 3;
    A[3] = 4;
    A[4] = 5;

    for(a = 0; a < 5; a++)
    {
        printf("A[%d] = %d\n", a, A[a]);
    }

    return 0;
}

이렇게 작성을 했고요,

이제 결과를 보도록 하겠습니다.

A[0] = 1
A[1] = 2
A[2] = 3
A[3] = 4
A[4] = 5

결과도 잘 나오는 것을 볼 수가 있습니다.

반응형

 

2. 배열과 반복문

우리는 보통 배열을 쓸 때 반복문을 쓰게 됩니다.

그 이유는 반복문을 쓰게되면 값을 한 번에 저장을 할 수 있기 때문입니다.

우리가 반복문을 쓰지 않는다면 인덱스에 일일이 데이터의 값을 선언을 하여 저장을 해야 하지만,

반복문을 쓰게 된다면 그럴 필요 없이 for문 하나로 저장을 할 수 있기 때문입니다.

그러면 제가 한 번 간단한 예제를 보여드리도록 하겠습니다.

#include <stdio.h>
#include <stdlib.h>

#define SIZE 5

int main()
{
    int scores[SIZE];

    for(int i = 0; i < SIZE; i++)
    {
        scores[i] = rand() % 100;
    }

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

    return 0;
}

이렇게 작성을 했습니다.

배열이 잘 저장이 되는지 테스트를 해보기 위해 난수 함수를 사용하기 위해서 <stdlib.h> 헤더 파일을 들여왔고,

배열의 크기는 가독성을 높이기 위해서 #define을 이용하여 상수화 시켰습니다.

그럼 결과를 바로 보도록 하겠습니다.

scores[0] = 41
scores[1] = 67
scores[2] = 34
scores[3] = 0
scores[4] = 69

이렇게 결과가 잘 저장이 된 것을 볼 수가 있습니다.

그러면 이걸 활용하여 학생들의 성적 평균을 구하는 프로그램을 한 번 작성을 해보도록 하겠습니다.

#include <stdio.h>
#include <stdlib.h>

#define STUDENTS 5

int main()
{
    int average, sum = 0;
    int scores[STUDENTS];

    for(int i = 0; i < STUDENTS; i++)
    {
        printf("학생들의 성적을 입력하세요 : ");
        scanf("%d", &scores[i]);
    }

    for(int i = 0; i < STUDENTS; i++) 
    {
        sum += scores[i];
    }

    average = sum / STUDENTS;

    printf("성적의 평균은 %d입니다.\n", average);
    
    return 0;
}

이렇게 작성을 했습니다.

그럼 결과는 어떻게 나오는지 한 번 볼까요?

학생들의 성적을 입력하세요 : 5
학생들의 성적을 입력하세요 : 78
학생들의 성적을 입력하세요 : 43
학생들의 성적을 입력하세요 : 87
학생들의 성적을 입력하세요 : 99
성적의 평균은 62입니다.

결과도 잘 나오는 것을 볼 수가 있습니다.

 

3. 인덱스의 범위

앞서 이야기를 했지만, 인덱스의 범위는 0부터 (n - 1)까지라 했습니다.

그 이유는 컴퓨터는 무조건 0부터 수를 세기 때문에 그렇습니다.

그래서 첫 번째 데이터에 접근을 하고 싶다면 인덱스 번호 0번의 데이터에 접근을 해야 합니다.

그리고 아까 예제에서 보실 수 있듯이, 제가 이렇게 쓴 것이 보였을 것입니다.

printf("scores[%d] = %d\n", i , scores[i]);
scanf("%d", &scores[i]);

형식 지정자와 대응이 되는 변수에 배열을 넣어도 문제가 되지 않습니다.

그 이유는 데이터에 접근을 하려면 배열의 인덱스 번호와 연결이 되어야 하기 때문에 이러한 부분에서 오류가 난다면 접근을 할 수가 없겠죠?

그리고 이러한 경우도 있을 수 있는데,

이 경우를 우리는 최악의 경우라 부르기로 했습니다.

그럼 바로 보여드리겠습니다.

int A[3]

A[3] = 5;

무엇이 잘못되었는지 바로 보이시죠?

배열의 범위를 벗어났습니다.

배열의 크기가 3이라면 인덱스 번호는 0, 1, 2가 되는데,

3을 넣음으로써 그 배열이 틀어진 것입니다.

이렇게 되면 엉뚱한 변수의 값을 변경을 하게 되고,

최악의 경우에는 컴퓨터 시스템 자체가 중단이 되는 불상사가 일어날 수 있으니,

항상 주의를 기울여야 합니다.

 

여기까지 배열의 기본에 대하여 알아보았는데요,

다음 포스팅에서는 배열을 초기화 하는 방법에 대하여 알아보도록 하겠습니다.

긴 글 읽어주신 독자님들께 진심으로 감사드립니다 ~

반응형

댓글