할당을 위한 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()를 사용하면 데이터 형식의 크기가 다를 수 있는 여러 시스템에서 코드가 올바르게 작동하며, 특정 형식의 요소를 지정된 개수만큼 저장할 공간을 할당하려는 의도를 명확하게 전달할 수 있습니다.
챌린지
쉬움malloc()을 사용한 동적 메모리 할당에서 sizeof()를 올바르게 사용하는 방법을 보여 주는 C 프로그램을 작성하세요. 프로그램은 다음을 수행해야 합니다.
- 할당할 요소의 수를 나타내는 정수
n을 사용자에게서 입력받습니다. malloc()과sizeof()를 사용하여n개의 double 값으로 이루어진 배열에 메모리를 동적으로 할당합니다.- 반환된 void 포인터를 double 포인터로 캐스팅합니다.
- 사용자에게서
n개의 double 값을 입력받아 할당된 배열에 저장합니다. - 할당된 총 메모리를 바이트 단위로 계산하고 다음 형식으로 출력합니다:
Memory allocated: [bytes] bytes - 모든 값의 평균을 계산하고 소수점 이하 정확히 2자리까지 다음 형식으로 출력합니다:
Average: [value] - 가장 큰 값을 찾아 소수점 이하 정확히 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;
}이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.
논리 & 흐름의 모든 레슨
직접 연습해 보세요: 온라인 C 컴파일러