Online C Compiler
Buka di kompiler

Edisi pembelajaran bahasa Indonesia. Kode dan keluarannya tetap seperti aslinya.

Struct, typedef, dan operator -> dalam C

Gabungkan data terkait dan bedakan akses melalui objek dari akses melalui pointer.

Buka di kompiler

Struct, typedef, dan operator -> dalam C
Gabungkan data terkait dan bedakan akses melalui objek dari akses melalui pointer.

struct mendefinisikan tipe dengan beberapa bidang. Titik mengakses bidang objek, sedangkan -> mengaksesnya melalui pointer yang valid. typedef memberi nama alternatif untuk tipe dan tidak mengalokasikan memori dengan sendirinya.

Array struct menyimpan rekaman secara berurutan. Inisialisasi bidang yang akan dibaca dan patuhi kapasitas array karakter. Penyalinan struct menyalin bidangnya, tetapi bidang pointer tetap menunjuk objek yang sama.

Kompiler dapat menambahkan padding untuk alignment. Karena itu, sizeof sebuah struct dapat melebihi jumlah ukuran bidangnya. Representasi mentah struct tidak boleh dianggap sebagai format berkas portabel.

Kode C

#include <stdio.h>
#include <string.h>

// Typedef struct definition
typedef struct {
    int id;
    char name[32];
    float gpa;
    int credits;
} Student;

// Function taking pointer to struct (arrow operator ->)
void print_student(const Student *s) {
    printf("ID: %-4d | Name: %-15s | GPA: %.2f | Credits: %d\n",
           s->id, s->name, s->gpa, s->credits);
}

// Mutate struct via pointer
void update_gpa(Student *s, float new_gpa) {
    s->gpa = new_gpa;
}

int main(void) {
    // Array of structs
    Student roster[] = {
        {101, "Alice Chen", 3.92f, 48},
        {102, "Bob Smith", 3.65f, 32},
        {103, "Charlie Davis", 3.88f, 60}
    };
    int total = sizeof(roster) / sizeof(roster[0]);

    printf("--- Engineering Class Roster ---\n");
    for (int i = 0; i < total; i++) {
        print_student(&roster[i]);
    }

    printf("\n--- Updating Bob's GPA via Pointer (Arrow ->) ---\n");
    update_gpa(&roster[1], 3.82f);
    print_student(&roster[1]);

    return 0;
}
Buka di kompiler

Keluaran yang diharapkan

--- Engineering Class Roster ---
ID: 101  | Name: Alice Chen      | GPA: 3.92 | Credits: 48
ID: 102  | Name: Bob Smith       | GPA: 3.65 | Credits: 32
ID: 103  | Name: Charlie Davis   | GPA: 3.88 | Credits: 60

--- Updating Bob's GPA via Pointer (Arrow ->) ---
ID: 102  | Name: Bob Smith       | GPA: 3.82 | Credits: 32

Pertanyaan umum

Mengapa kode dan keluarannya tetap dalam bahasa Inggris?

Kata kunci, pengenal, dan teks yang diperiksa tes dipertahankan agar program tidak berubah. Penjelasan dan kontrol telah diterjemahkan.