Menu
Coddy logo textTech

할당을 위한 sizeof() 사용

Coddy C 여정의 Logic & Flow 섹션에 포함된 레슨 — 63개 중 33번째.

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

sizeof() 연산자는 시스템에서 특정 데이터 타입을 저장하는 데 필요한 바이트 수를 반환합니다. 바이트 크기를 직접 입력(hardcoding)하는 대신, 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. sizeof()malloc()을 사용하여 n개의 double 값을 저장할 배열을 위한 메모리를 동적으로 할당합니다.
  3. 반환된 void 포인터를 double 포인터로 형변환(cast)합니다.
  4. 사용자로부터 n개의 double 값을 입력받아 할당된 배열에 저장합니다.
  5. 할당된 총 메모리 크기를 바이트 단위로 계산하고 다음 형식으로 출력합니다: Memory allocated: [bytes] bytes
  6. 모든 값의 평균을 계산하고 소수점 둘째 자리까지 다음 형식으로 출력합니다: Average: [value]
  7. 최댓값을 찾아 소수점 둘째 자리까지 다음 형식으로 출력합니다: Largest: [value]

malloc()을 사용하기 위해 <stdlib.h> 헤더를 포함해야 함을 잊지 마세요. 프로그램은 시스템의 데이터 타입 크기에 관계없이 sizeof()가 어떻게 정확한 메모리 할당을 보장하는지 보여주어야 합니다.

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

3
2.5 7.8 4.1

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

Memory allocated: 24 bytes
Average: 4.80
Largest: 7.80

이 챌린지는 sizeof()를 사용하여 동적 메모리 할당을 이식 가능하고 유지 관리하기 쉽게 만드는 것의 중요성을 강조합니다. sizeof()는 모든 시스템에서 모든 데이터 타입에 필요한 정확한 바이트 수를 자동으로 계산해 줍니다.

치트 시트

모든 데이터 유형에 대해 할당할 정확한 바이트 수를 결정하려면 sizeof() 연산자를 malloc()과 함께 사용하십시오:

// 이식 가능한 메모리 할당
int *ptr = (int*)malloc(sizeof(int));

// 배열 할당
int *arr = (int*)malloc(10 * sizeof(int));
double *values = (double*)malloc(5 * sizeof(double));

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의 모든 레슨