Menu
CoddyTech

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 benar

Pendekatan 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.

challenge icon

Tantangan

Mudah

Tulis program C yang menunjukkan penggunaan sizeof() dengan malloc() yang tepat untuk alokasi memori dinamis. Programmu harus:

  1. Membaca bilangan bulat n dari pengguna yang menunjukkan jumlah elemen yang akan dialokasikan
  2. Menggunakan malloc() dengan sizeof() untuk mengalokasikan memori secara dinamis bagi array yang berisi n nilai double
  3. Meng-cast pointer void yang dikembalikan menjadi pointer double
  4. Membaca n nilai double dari pengguna dan menyimpannya dalam array yang dialokasikan
  5. Menghitung total memori yang dialokasikan dalam byte dan mencetaknya dengan format: Memory allocated: [bytes] bytes
  6. Menghitung dan mencetak rata-rata semua nilai dengan tepat 2 angka di belakang koma menggunakan format: Average: [value]
  7. 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.1

Output-mu seharusnya:

Memory allocated: 24 bytes
Average: 4.80
Largest: 7.80

Tantangan 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;
}
quiz iconUji dirimu

Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.

Semua pelajaran di Logika dan Alur

Latihan sendiri: Compiler C online