Menguasai Struct dan Pointer C: Panduan Praktis
Menguasai Struct dan Pointer C: Panduan Praktis
Temukan cara memanfaatkan pointer untuk menavigasi anggota struct, dan pelajari alokasi memori dinamis untuk struktur data C yang fleksibel.
Sebelum menyelami pointer dengan struct, familiaraskan diri Anda dengan topik dasar ini:
Menggunakan Pointer untuk Mereferensikan Struct
Di bawah ini adalah contoh ringkas yang menunjukkan cara mendeklarasikan struct dan pointer yang mereferensikannya.
struct Person { int member1; int member2; /* anggota tambahan */ }; int main(void) { struct Person *ptr, harry; /* ptr sekarang dapat menunjuk ke instance Person apa pun */ }
Dalam cuplikan ini, ptr adalah pointer ke instance struct Person.
Contoh: Mengakses Anggota Struct melalui Pointer
Untuk membaca atau menulis bidang struct melalui pointer, gunakan operator ->.
#include <stdio.h> struct Person { int age; float weight; }; int main(void) { struct Person *personPtr, person1; personPtr = &person1; /* point to person1 */ printf("Masukkan usia: "); scanf("%d", &personPtr->age); printf("Masukkan berat badan: "); scanf("%f", &personPtr->weight); printf("\nMenampilkan:\n"); printf("Usia: %d\n", personPtr->age); printf("Berat badan: %f", personPtr->weight); return 0; }
Di sini, personPtr = &person1; menyimpan alamat person1 di personPtr. Akses berikutnya melalui personPtr->field setara dengan (*personPtr).field, menawarkan sintaks yang ringkas.
personPtr->age sama dengan (*personPtr).age personPtr->weight sama dengan (*personPtr).weight
Alokasi Memori Dinamis untuk Struct
Ketika jumlah instance struct yang diperlukan tidak diketahui pada waktu kompilasi, alokasikan memori pada waktu runtime menggunakan pustaka standar C.
Contoh: Mengalokasikan Array Struct
#include <stdio.h> #include <stdlib.h> struct Person { int age; float weight; char name[30]; }; int main(void) { struct Person *ptr; int i, n; printf("Masukkan jumlah orang: "); scanf("%d", &n); ptr = (struct Person*)malloc(n * sizeof(struct Person)); if (!ptr) { fprintf(stderr, "Alokasi memori gagal\n"); return EXIT_FAILURE; } for (i = 0; i < n; ++i) { printf("Masukkan nama depan dan usia masing-masing: "); scanf("%s %d", (ptr + i)->name, &(ptr + i)->age); } printf("\nMenampilkan Informasi:\n"); for (i = 0; i < n; ++i) { printf("Nama: %s\tUsia: %d\n", (ptr + i)->name, (ptr + i)->age); } free(ptr); return 0; }
Menjalankan program menghasilkan:
Masukkan jumlah orang: 2 Masukkan nama depan dan usia masing-masing: Harry 24 Masukkan nama depan dan usia masing-masing: Gary 32 Menampilkan Informasi: Nama: Harry Usia: 24 Nama: Gary Usia: 32
Contoh ini menunjukkan cara membuat n instance dari struct Person di heap, membaca input pengguna ke setiap instance, dan kemudian menampilkan hasilnya.