Table of contents
우리가 특정 자료형의 변수를 선언하면 이는 메모리상 어딘가에 특정 크기만큼의 자리를 차지하게 된다. 만약 비슷한 종류의 값을 모아서 저장하고 싶다면 어떻게 해야 할까?
메모리상에서 여러 값을 연이어서 저장하고 사용하는 방법과 그 이점을 알아보자.
메모리
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)에서 다룰 예정이다.
생각해보기
실생활의 어떤 데이터를 배열로 표현할 수 있을까?
학급에 있는 학생들의 시험 점수를 배열로 저장할 수 있다.
예를 들어, 수학 시험의 전체 학생 점수를 하나의 배열로 표현하여 각 학생의 성적에 쉽게 접근하고, 평균 점수를 계산할 수 있다.