Menggunakan sizeof() untuk Alokasi
Termasuk bagian Logika dan Alur dalam perjalanan C di Coddy. Pelajaran 33 dari 63.
Meskipun malloc() memungkinkan kamu mengalokasikan memori secara dinamis, ada praktik terbaik penting yang membuat kodemu lebih portabel dan mudah dipelihara: menggunakan operator sizeof() untuk menentukan jumlah byte yang perlu dialokasikan.
Operator sizeof() mengembalikan jumlah byte yang diperlukan untuk menyimpan tipe data tertentu di sistem kamu. Alih-alih menetapkan ukuran byte secara hardcode, kamu bisa membiarkan sizeof() menghitung jumlah yang tepat secara otomatis:
// Daripada menebak ukuran dalam byte:
int *ptr = (int*)malloc(4); // Menganggap int berukuran 4 byte
// Gunakan sizeof() agar kodemu portabel:
int *ptr = (int*)malloc(sizeof(int)); // Selalu benarPendekatan ini menjadi sangat berguna saat mengalokasikan array. Untuk mengalokasikan ruang bagi beberapa elemen, kalikan jumlah elemen dengan ukuran setiap elemen:
// Alokasikan ruang untuk 10 bilangan bulat
int *arr = (int*)malloc(10 * sizeof(int));
// Alokasikan ruang untuk 5 nilai double
double *values = (double*)malloc(5 * sizeof(double));Menggunakan sizeof() membuat kodemu berfungsi dengan benar di berbagai sistem yang mungkin memiliki ukuran tipe data berbeda, dan mengomunikasikan dengan jelas maksudmu untuk mengalokasikan ruang bagi sejumlah elemen tertentu dengan tipe tertentu.
Tantangan
MudahTulis program C yang menunjukkan penggunaan sizeof() dengan malloc() yang tepat untuk alokasi memori dinamis. Programmu harus:
- Membaca bilangan bulat
ndari pengguna yang menunjukkan jumlah elemen yang akan dialokasikan - Menggunakan
malloc()dengansizeof()untuk mengalokasikan memori secara dinamis bagi array yang berisinnilai double - Meng-cast pointer void yang dikembalikan menjadi pointer double
- Membaca
nnilai double dari pengguna dan menyimpannya dalam array yang dialokasikan - Menghitung total memori yang dialokasikan dalam byte dan mencetaknya dengan format:
Memory allocated: [bytes] bytes - Menghitung dan mencetak rata-rata semua nilai dengan tepat 2 angka di belakang koma menggunakan format:
Average: [value] - Menemukan dan mencetak nilai terbesar dengan tepat 2 angka di belakang koma menggunakan format:
Largest: [value]
Ingat untuk menyertakan header <stdlib.h> agar dapat menggunakan malloc(). Programmu harus menunjukkan bagaimana sizeof() memastikan alokasi memori yang benar terlepas dari ukuran tipe data pada sistem.
Contohnya, jika input-nya adalah:
3
2.5 7.8 4.1Output-mu seharusnya:
Memory allocated: 24 bytes
Average: 4.80
Largest: 7.80Tantangan ini memperkuat pentingnya penggunaan sizeof() agar alokasi memori dinamis yang kamu lakukan portabel dan mudah dipelihara, serta menghitung secara otomatis jumlah byte yang tepat untuk tipe data apa pun di sistem mana pun.
Coba sendiri
#include <stdio.h>
#include <stdlib.h>
int main() {
// Baca jumlah elemen
int n;
scanf("%d", &n);
// TODO: Tulis kodemu di bawah ini
// 1. Alokasikan memori untuk n nilai double menggunakan malloc() dan sizeof()
// 2. Ubah tipe pointer yang dikembalikan menjadi double*
// 3. Baca n nilai double dan simpan dalam array yang dialokasikan
// 4. Hitung dan tampilkan memori yang dialokasikan dalam byte
// 5. Hitung dan tampilkan rata-rata dengan 2 angka di belakang koma
// 6. Temukan dan tampilkan nilai terbesar dengan 2 angka di belakang koma
return 0;
}Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.
Semua pelajaran di Logika dan Alur
1Dasar-Dasar Pointer
Apa Itu Pointer?Mendeklarasikan PointerOperator Address-Of (&)Operator Dereference (*)Pointer NULLRekap: Dasar-Dasar Pointer4Proyek: Utilitas Teks Sederhana
Gambaran Umum ProyekMenghitung Karakter2Pointer dan array
Nama array sebagai pointerElemen array dan pointerAritmetika pointerMembandingkan pointerRangkuman: Menelusuri array dengan pointer5Pointer dan Fungsi
Penerusan dengan NilaiMeneruskan Pointer ke FungsiMengubah Variabel melalui PointerContoh Klasik: SwapMeneruskan Array ke FungsiRingkasan: Argumen Pointer Fungsi8Struct dan Pointer
Pointer ke StructOperator Panah (->)Mengirim Struct berdasarkan NilaiMengirim Pointer StructAlokasi Dinamis StructUlasan: Memodifikasi Struct dengan Pointer11Tantangan Rangkuman Akhir
Rangkuman: Penggabungan string DinamisRangkuman: array berisi structRangkuman: Penghitung Frekuensi Kata3Array char dan String
String sebagai array charPenanda akhir nullInput String dengan scanfMenggunakan strlen()Menggunakan strcpy()Menggunakan strcat()Menggunakan strcmp()Ulasan: Fungsi String Dasar6Manajemen Memori
Memori Stack vs. HeapAlokasi Dinamis dengan malloc()Menggunakan sizeof() untuk AlokasiMemeriksa Kegagalan AlokasiMembebaskan Memori dengan free()Alokasi dengan calloc()Ringkasan: array DinamisLatihan sendiri: Compiler C online