할당을 위한 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()를 사용하면 데이터 타입의 크기가 다를 수 있는 다양한 시스템에서 코드가 올바르게 작동하며, 특정 타입의 특정 요소 개수를 위한 공간을 할당하려는 의도를 명확하게 전달할 수 있습니다.
챌린지
쉬움동적 메모리 할당을 위해 malloc()과 함께 sizeof()를 올바르게 사용하는 방법을 보여주는 C 프로그램을 작성하세요. 프로그램은 다음을 수행해야 합니다:
- 사용자로부터 할당할 요소의 개수를 나타내는 정수
n을 읽습니다. n개의 double 값을 저장할 배열을 위해malloc()과sizeof()를 사용하여 메모리를 동적으로 할당합니다.- 반환된 void 포인터를 double 포인터로 형변환(cast)합니다.
- 사용자로부터
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. 평균을 계산하고 소수점 둘째 자리까지 출력합니다
// 6. 최댓값을 찾아 소수점 둘째 자리까지 출력합니다
return 0;
}이 레슨에는 짧은 퀴즈가 포함되어 있습니다. 레슨을 시작해 문제를 풀고 진행 상황을 기록하세요.