[배열] 배열(1)

·

2 min read

[배열] 배열(1)

우리가 특정 자료형의 변수를 선언하면 이는 메모리상 어딘가에 특정 크기만큼의 자리를 차지하게 된다. 만약 비슷한 종류의 값을 모아서 저장하고 싶다면 어떻게 해야 할까?

메모리상에서 여러 값을 연이어서 저장하고 사용하는 방법과 그 이점을 알아보자.

메모리

C에는 아래와 같은 여러 자료형이 있고, 각각의 자료형은 서로 다른 크기의 메모리를 차지한다. >

  • bool: 불리언, 1바이트
  • char: 문자, 1바이트
  • int: 정수, 4바이트
  • float: 실수, 4바이트
  • long: (더 큰) 정수, 8바이트
  • double: (더 큰) 실수, 8바이트
  • string: 문자열, ?바이트

컴퓨터 안에는 아래과 같은 RAM 이라고 하는 물리적 칩이 메모리 역할을 한다.

쉽게 생각하면 여러 개의 노란색 사각형이 메모리를 의미하고, 작은 사각형 하나가 1바이트를 의미한다고 볼 수 있다.

예를 들어 char 타입의 변수를 하나 생성하고, 그 값을 입력한다고 하면 위 사진에서 한 사각형 안에 그 변수의 값이 저장되는 것이다.

배열

다음은 세 개의 점수를 저장하고 그 평균을 출력하는 프로그램이다.

#include <cs50.h>
#include <stdio.h>

int main(void)
{
    // Scores
    int score1 = 72;
    int score2 = 73;
    int score3 = 33;

    // Print average
    printf("Average: %i\n", (score1 + score2 + score3) / 3);
}


만약 점수의 개수가 더 많아진다면 이 프로그램은 많은 부분을 수정해줘야 하는데, 이 때 활용할 수 있는 것이 배열이다.

배열은 같은 자료형의 데이터를 메모리상에 연이어서 저장하고 이를 하나의 변수로 관리하기 위해 사용된다.

다음은 배열을 이용한 코드이다.

#include <cs50.h>
#include <stdio.h>

int main(void)
{
    // Scores
    int scores[3];
    scores[0] = 72;
    scores[1] = 73;
    scores[2] = 33;

    // Print average
    printf("Average: %i\n", (scores[0] + scores[1] + scores[2]) / 3);
}

int scores[3];int 자료형을 가지는 크기 3의 배열을 scores라는 이름으로 생성하겠다는 의미이다.

배열의 인덱스는 0부터 시작하기 때문에, scores의 인덱스는 0, 1, 2 세 개가 있다.

이 인덱스를 변수명 뒤 대괄호 [] 사이에 입력하여 배열의 원하는 위치에 원하는 값을 저장하고 불러올 수 있다.

하지만 위와 같은 코드는 여전히 점수의 개수가 바뀌는 상황에서 제약이 많기 때문에 보다 동적으로 선언하고 저장해야 한다.

이에 대해서는 다음 챕터인 배열(2)에서 다룰 예정이다.

생각해보기

실생활의 어떤 데이터를 배열로 표현할 수 있을까?

학급에 있는 학생들의 시험 점수를 배열로 저장할 수 있다.

예를 들어, 수학 시험의 전체 학생 점수를 하나의 배열로 표현하여 각 학생의 성적에 쉽게 접근하고, 평균 점수를 계산할 수 있다.