[CS50] 배열

TIL

메모리와 자료형

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

 

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
'TIL' 카테고리의 다른 글
  • [CS50] 배열 - 문자열의 활용
  • [CS50] 배열 - 문자열과 배열
  • [CS50] 디버깅
  • [CS50] 컴파일링
고견
고견
개발 자국 남기기
  • 고견
    개발자국
    고견
  • 전체
    오늘
    어제
    • 분류 전체보기 (157) N
      • Frontend (29)
        • Next.js (16)
        • JavaScript (7)
      • CS (19) N
        • 자료구조 (9)
        • 알고리즘 (5)
        • 운영체제 (4) N
        • 네트워크 (1) N
      • TIL (93)
      • Dev Log (16)
  • 블로그 메뉴

    • 홈
    • 태그
    • 방명록
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    알고리즘
    emotion diary
    인터페이스
    react
    배열
    javascript
    바닐라 자바스크립트
    CS
    Pages Router
    문자열
    클래스
    memory
    페이지 라우터
    자료구조
    트러블 슈팅
    C
    App Router
    Next.js
    제네릭
    cs50
    typescript
    타입 좁히기
    함수 타입
    Trouble Shooting
    ai 감성 일기장
    앱 라우터
    generic
    useState
    algorithm
    Spa
  • 최근 댓글

  • 최근 글

  • hELLO· Designed By정상우.v4.10.5
고견
[CS50] 배열
상단으로

티스토리툴바