Menu
CoddyTech

할당을 위한 sizeof() 사용

Coddy C 여정의 논리 & 흐름 섹션에 포함된 레슨. 63개 중 33번째.

malloc()을 사용하면 메모리를 동적으로 할당할 수 있지만, 코드를 더 이식성 있고 유지 관리하기 쉽게 만들어 주는 중요한 모범 사례가 있습니다. 바로 할당할 바이트 수를 결정할 때 sizeof() 연산자를 사용하는 것입니다.

sizeof() 연산자는 시스템에서 특정 데이터 유형을 저장하는 데 필요한 바이트 수를 반환합니다. 바이트 크기를 하드코딩하는 대신, sizeof()가 올바른 크기를 자동으로 계산하도록 할 수 있습니다.

// 바이트 크기를 추측하는 대신:
int *ptr = (int*)malloc(4);  // int가 4바이트라고 가정함

// 이식성을 위해 sizeof()를 사용하세요:
int *ptr = (int*)malloc(sizeof(int));  // 항상 올바름

이 접근 방식은 배열을 할당할 때 특히 유용합니다. 여러 요소를 위한 공간을 할당하려면 요소의 개수에 각 요소의 크기를 곱하세요:

// 정수 10개를 위한 메모리 공간을 할당합니다
int *arr = (int*)malloc(10 * sizeof(int));

// double 값 5개를 위한 메모리 공간을 할당합니다
double *values = (double*)malloc(5 * sizeof(double));

sizeof()를 사용하면 데이터 형식의 크기가 다를 수 있는 여러 시스템에서 코드가 올바르게 작동하며, 특정 형식의 요소를 지정된 개수만큼 저장할 공간을 할당하려는 의도를 명확하게 전달할 수 있습니다.

challenge icon

챌린지

쉬움

malloc()을 사용한 동적 메모리 할당에서 sizeof()를 올바르게 사용하는 방법을 보여 주는 C 프로그램을 작성하세요. 프로그램은 다음을 수행해야 합니다.

  1. 할당할 요소의 수를 나타내는 정수 n을 사용자에게서 입력받습니다.
  2. malloc()과 sizeof()를 사용하여 n개의 double 값으로 이루어진 배열에 메모리를 동적으로 할당합니다.
  3. 반환된 void 포인터를 double 포인터로 캐스팅합니다.
  4. 사용자에게서 n개의 double 값을 입력받아 할당된 배열에 저장합니다.
  5. 할당된 총 메모리를 바이트 단위로 계산하고 다음 형식으로 출력합니다: Memory allocated: [bytes] bytes
  6. 모든 값의 평균을 계산하고 소수점 이하 정확히 2자리까지 다음 형식으로 출력합니다: Average: [value]
  7. 가장 큰 값을 찾아 소수점 이하 정확히 2자리까지 다음 형식으로 출력합니다: Largest: [value]

malloc()을 사용하려면 <stdlib.h> 헤더를 포함해야 합니다. 프로그램은 sizeof()가 시스템의 데이터 형식 크기와 관계없이 올바른 메모리 할당을 보장하는 방법을 보여 주어야 합니다.

예를 들어, 입력이 다음과 같다면:

3
2.5 7.8 4.1

출력은 다음과 같아야 합니다.

Memory allocated: 24 bytes
Average: 4.80
Largest: 7.80

이 과제는 sizeof()를 사용하여 동적 메모리 할당의 이식성과 유지 관리성을 높이고, 어떤 시스템에서든 어떤 데이터 형식에 필요한 정확한 바이트 수를 자동으로 계산하는 것의 중요성을 익히도록 합니다.

직접 해보기

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

int main() {
    // 요소의 개수를 입력받습니다
    int n;
    scanf("%d", &n);
    
    // TODO: 아래에 코드를 작성하세요
    // 1. malloc()과 sizeof()를 사용하여 n개의 double 값에 필요한 메모리를 할당합니다
    // 2. 반환된 포인터를 double*로 형변환합니다
    // 3. n개의 double 값을 입력받아 할당된 배열에 저장합니다
    // 4. 할당된 메모리의 크기를 바이트 단위로 계산하여 출력합니다
    // 5. 평균을 계산하고 소수점 이하 2자리까지 출력합니다
    // 6. 최댓값을 찾아 소수점 이하 2자리까지 출력합니다
    
    return 0;
}
quiz icon실력 점검

이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.

논리 & 흐름의 모든 레슨

직접 연습해 보세요: 온라인 C 컴파일러