Pointer ke Struct
Termasuk bagian Logika dan Alur dalam perjalanan C di Coddy. Pelajaran 44 dari 63.
Sekarang kamu sudah nyaman bekerja dengan struct, saatnya menggabungkannya dengan konsep C yang hebat lainnya: pointer. Sama seperti kamu dapat membuat pointer ke tipe data dasar seperti int atau char, kamu juga dapat membuat pointer yang menyimpan alamat variabel struct.
Sintaks untuk mendeklarasikan pointer ke struct mengikuti pola yang sama dengan deklarasi pointer lainnya:
struct StructureName *pointerName;Misalnya, dengan menggunakan struct Point yang sudah kita kenal:
struct Point p1 = {10, 20};
struct Point *ptr;Ini membuat pointer bernama ptr yang dapat menyimpan alamat struct Point. Agar pointer benar-benar menunjuk ke variabel struct kita, gunakan operator address-of:
ptr = &p1;Untuk membaca member melalui pointer, lakukan dereferensi pada pointer, lalu gunakan operator titik. Tanda kurung diperlukan karena . memiliki prioritas lebih tinggi daripada *:
printf("%d", (*ptr).x); // sama dengan p1.xSekarang ptr menyimpan alamat memori dari variabel struct p1. Ini membuka berbagai kemungkinan baru dalam bekerja dengan struct, terutama saat meneruskannya ke fungsi atau mengelola memori secara dinamis. Pointer ke struct sangat penting untuk membangun struktur data yang lebih kompleks dan menulis program C yang efisien.
Tantangan
MudahBuat program C yang menunjukkan cara bekerja dengan pointer ke struct. Programmu harus:
- Mendefinisikan
structbernamaProductdengan anggota berikut:- Integer
iduntuk menyimpan ID produk - Array karakter
nameberukuran 25 untuk menyimpan nama produk - Float
priceuntuk menyimpan harga produk - Integer
quantityuntuk menyimpan jumlah yang tersedia
- Integer
- Di fungsi utama, membuat variabel
Productbernamaitemdan menginisialisasinya dengan nilai berikut:- ID: 501
- Nama: "Laptop"
- Harga: 899.99
- Jumlah: 15
- Mendeklarasikan pointer ke struct
ProductbernamaitemPtr - Menetapkan alamat variabel
itemkeitemPtrmenggunakan operator alamat - Mencetak informasi produk asli dengan mengakses anggota struct secara langsung (menggunakan operator titik) dalam format persis berikut:
Original Product Info:ID: [id]Name: [name]Price: [price]Quantity: [quantity]
- Mencetak informasi produk yang sama dengan mengakses anggota struct melalui pointer (menggunakan operator dereferensi dan notasi titik:
(*itemPtr).member) dalam format persis berikut:Product Info via Pointer:ID: [id]Name: [name]Price: [price]Quantity: [quantity]
- Memverifikasi bahwa pointer menunjuk ke struct dengan mencetak alamat memori dalam format persis berikut:
Address of item: [address]Value of itemPtr: [address]Address verification: [result]
Untuk verifikasi alamat, cetak Match jika alamatnya sama, atau No Match jika berbeda.
Tantangan ini menguji pemahamanmu tentang deklarasi pointer ke struct, penetapan alamat menggunakan operator alamat, dan cara mengakses anggota struct melalui pointer menggunakan operator dereferensi yang dipadukan dengan notasi titik. Kamu juga akan memverifikasi bahwa pointer menyimpan alamat variabel struct dengan benar.
Coba sendiri
#include <stdio.h>
#include <string.h>
// TODO: Definisikan struct Product di sini
int main() {
// TODO: Tulis kodemu di sini
// 1. Buat dan inisialisasi variabel Product bernama 'item'
// 2. Deklarasikan pointer ke Product bernama 'itemPtr'
// 3. Tetapkan alamat 'item' ke 'itemPtr'
// 4. Cetak informasi produk asli menggunakan operator titik
// 5. Cetak informasi produk melalui pointer menggunakan (*itemPtr).member
// 6. Cetak dan periksa alamatnya
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 DasarLatihan sendiri: Compiler C online