메모리와 자료형
특정 자료형의 변수를 선언하면 메모리상에 특정 크기만큼 자리를 차지한다. 비슷한 종류의 값을 모아서 저장하려면 어떻게 해야 할까?
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)
{
int score1 = 72;
int score2 = 73;
int score3 = 33;
printf("Average: %i\n", (score1 + score2 + score3) / 3);
}
점수 개수가 늘어나면 많은 수정이 필요하다. 이때 배열을 활용한다.
배열은 같은 자료형의 데이터를 메모리상에 연이어 저장하고 하나의 변수로 관리한다.
#include <cs50.h>
#include <stdio.h>
int main(void)
{
int scores[3];
scores[0] = 72;
scores[1] = 73;
scores[2] = 33;
printf("Average: %i\n", (scores[0] + scores[1] + scores[2]) / 3);
}
int scores[3]은 int 자료형을 가지는 크기 3의 배열을 선언한다. 배열의 인덱스는 0부터 시작하므로 scores의 인덱스는 0, 1, 2다.
대괄호 [] 안에 인덱스를 넣어 배열의 원하는 위치에 값을 저장하고 불러올 수 있다.
전역 변수
배열 크기를 상수로 정의하면 코드를 더 유연하게 만들 수 있다.
#include <cs50.h>
#include <stdio.h>
const int N = 3;
int main(void)
{
int scores[N];
scores[0] = 72;
scores[1] = 73;
scores[2] = 33;
printf("Average: %i\n", (scores[0] + scores[1] + scores[2]) / N);
}
const는 값이 변하지 않는 상수임을 나타낸다. 관례적으로 전역 변수는 대문자로 표기한다.
동적 배열
루프와 함수를 사용하면 더 동적인 프로그램을 작성할 수 있다.
#include <cs50.h>
#include <stdio.h>
float average(int length, int array[]);
int main(void)
{
int n = get_int("Scores: ");
int scores[n];
for (int i = 0; i < n; i++)
{
scores[i] = get_int("Score %i: ", i + 1);
}
printf("Average: %.1f\n", average(n, scores));
}
float average(int length, int array[])
{
int sum = 0;
for (int i = 0; i < length; i++)
{
sum += array[i];
}
return (float) sum / (float) length;
}
배열 크기를 사용자에게 입력받고, 배열 크기만큼 루프를 돌며 각 값을 동적으로 입력받아 저장한다.
average 함수는 배열의 길이와 배열을 입력받아 평균을 계산한다. 배열 길이만큼 루프를 돌며 값의 합을 구하고 평균값을 반환한다.
'TIL' 카테고리의 다른 글
| [CS50] 배열 - 문자열의 활용 (0) | 2025.11.06 |
|---|---|
| [CS50] 배열 - 문자열과 배열 (0) | 2025.11.06 |
| [CS50] 디버깅 (0) | 2025.11.05 |
| [CS50] 컴파일링 (0) | 2025.11.05 |
| [CS50] 하드웨어의 한계와 오버플로우 (0) | 2025.11.05 |
