Menu
Coddy logo textTech

할당을 위한 sizeof() 사용

Coddy C 여정의 Logic & Flow 섹션에 포함된 레슨 — 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));

// 5개의 double을 위한 공간 할당
double *values = (double*)malloc(5 * sizeof(double));

sizeof()를 사용하면 데이터 타입의 크기가 다를 수 있는 다양한 시스템에서 코드가 올바르게 작동하며, 특정 타입의 특정 요소 개수를 위한 공간을 할당하려는 의도를 명확하게 전달할 수 있습니다.

challenge icon

챌린지

쉬움

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

  1. 사용자로부터 할당할 요소의 개수를 나타내는 정수 n을 읽습니다.
  2. n개의 double 값을 저장할 배열을 위해 malloc()sizeof()를 사용하여 메모리를 동적으로 할당합니다.
  3. 반환된 void 포인터를 double 포인터로 형변환(cast)합니다.
  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. 평균을 계산하고 소수점 둘째 자리까지 출력합니다
    // 6. 최댓값을 찾아 소수점 둘째 자리까지 출력합니다
    
    return 0;
}
quiz icon실력 점검

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

Logic & Flow의 모든 레슨