Menu
CoddyTech

Inisialisasi Stack

Termasuk bagian Pemrograman Berorientasi Objek dalam perjalanan C di Coddy. Pelajaran 14 dari 61.

Tidak semua object perlu disimpan di heap. Jika struct berukuran kecil dan masa hidupnya singkat, mengalokasikannya di stack lebih sederhana dan cepat: tanpa malloc, tanpa free, tanpa risiko kebocoran memori.

Alih-alih mengembalikan pointer, fungsi factory dapat mengembalikan struct berdasarkan nilai. Seluruh struct disalin ke pemanggil:

typedef struct {
    int x;
    int y;
} Point;

Point create_point(int x, int y) {
    Point p;
    p.x = x;
    p.y = y;
    return p;
}

Pemanggil menerima salinan yang sudah diinisialisasi sepenuhnya:

Point origin = create_point(0, 0);
Point cursor = create_point(100, 50);
printf("Cursor: (%d, %d)\n", cursor.x, cursor.y);

Tidak ada pointer, tidak perlu pembersihan. Saat origin dan cursor keluar dari cakupan, keduanya otomatis dihancurkan.

Pendekatan ini paling cocok untuk struct kecil tanpa anggota yang dialokasikan secara dinamis. Untuk object yang lebih besar atau yang berisi pointer ke memori heap, pola constructor dengan malloc tetap menjadi pilihan yang lebih baik.

challenge icon

Tantangan

Mudah

Mari buat module Temperature yang membuat pembacaan suhu di stack menggunakan fungsi factory. Berbeda dari constructor berbasis heap pada pelajaran sebelumnya, pendekatan ini mengembalikan struct berdasarkan nilai: tanpa malloc, tanpa free, hanya alokasi stack yang sederhana dan efisien.

Kamu akan membuat tiga file:

  • temperature.h: Deklarasikan struct Temperature dengan dua anggota: double celsius dan char scale (untuk menyimpan 'C' sebagai penanda Celsius). Deklarasikan juga dua fungsi:
    • create_temperature: menerima nilai double dan mengembalikan struct Temperature berdasarkan nilai (bukan pointer!)
    • temperature_to_fahrenheit: menerima const Temperature * dan mengembalikan suhu setara dalam Fahrenheit sebagai double
    Gunakan include guard dengan simbol TEMPERATURE_H.
  • temperature.c: Implementasikan kedua fungsi. Fungsi factory-mu harus membuat variabel Temperature lokal, menginisialisasi field-nya (atur scale menjadi 'C'), lalu mengembalikannya. Rumus konversinya adalah: fahrenheit = celsius * 9.0 / 5.0 + 32.0
  • main.c: Gunakan fungsi factory-mu untuk membuat pembacaan suhu dan menampilkan nilai Celsius dan Fahrenheit.

Kamu akan menerima satu input: suhu dalam Celsius (sebagai double).

Di file utamamu, gunakan create_temperature untuk membuat struct Temperature dengan nilai yang diberikan. Lalu cetak nilai Celsius asli dan nilai setara Fahrenheit-nya.

Cetak output dalam format ini:

Celsius: {celsius}
Fahrenheit: {fahrenheit}

Gunakan %.2f untuk kedua nilai agar menampilkan dua angka di belakang koma.

Misalnya, dengan input 25.0, outputnya akan menjadi:

Celsius: 25.00
Fahrenheit: 77.00

Perhatikan betapa rapi pendekatan ini. Kamu menerima struct yang sudah sepenuhnya diinisialisasi tanpa perlu mengkhawatirkan pengelolaan memori. Saat variabel Temperature-mu keluar dari cakupan, variabel itu otomatis dibersihkan.

Coba sendiri

#include <stdio.h>
#include "temperature.h"

int main() {
    double celsius_input;
    scanf("%lf", &celsius_input);
    
    // TODO: Gunakan create_temperature untuk membuat struct Temperature
    
    // TODO: Cetak nilai Celsius dengan format %.2f
    
    // TODO: Gunakan temperature_to_fahrenheit untuk mengonversi dan mencetak nilai Fahrenheit
    
    return 0;
}
quiz iconUji dirimu

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

Semua pelajaran di Pemrograman Berorientasi Objek

Latihan sendiri: Compiler C online