Array of Pointers di C
Halo para jago pemrograman masa depan! hari ini, kita akan melakukan perjalanan yang menarik ke dunia pemrograman C, khususnya menjelajahi konsep yang menarik tentang Array of Pointers. Jangan khawatir jika ini terdengar menakutkan di awal – saya berjanji bahwa pada akhir tutorial ini, Anda akan menggunakan alat ini yang kuat seperti seorang pro!
Apa itu Array of Pointers?
Sebelum kita melompat ke ujung, mari kita mulai dengan dasar-dasar. Bayangkan Anda memiliki sejumlah tongkat penyihir (pointer), masing-masing dapat menyebarkan spell yang berbeda (data). apa yang akan terjadi jika Anda dapat mengorganisir tongkat ini dalam satu baris yang rapi (array)? Itu hampir sama dengan apa itu Array of Pointers – sebuah koleksi alamat memori, semua berada di atas dan siap untuk aksi!
Dalam istilah pemrograman C, Array of Pointers adalah hanya sebuah array di mana setiap elemen adalah sebuah pointer. Pointer ini dapat menunjuk ke berbagai jenis tipe data seperti integer, karakter, atau bahkan struktur kompleks.
Membuat Array of Pointers
Mari kita mulai dengan membuat array of pointers pertama kita. Sintaksnya cukup mirip dengan membuat array reguler, tetapi dengan sedikit putaran:
tipe_data *nama_array[ukuran];
Disini, tipe_data
adalah tipe data yang akan ditunjuk oleh pointer, nama_array
adalah apa yang Anda ingin panggil array Anda, dan ukuran
adalah jumlah pointer yang Anda inginkan di array Anda.
Lihatlah contoh sederhana ini:
#include <stdio.h>
int main() {
int *number_pointers[5]; // Mendeklarasikan sebuah array dari 5 pointer integer
int a = 10, b = 20, c = 30, d = 40, e = 50;
// Mengassign alamat kepada pointer
number_pointers[0] = &a;
number_pointers[1] = &b;
number_pointers[2] = &c;
number_pointers[3] = &d;
number_pointers[4] = &e;
// Mencetak nilai yang ditunjuk oleh setiap pointer
for(int i = 0; i < 5; i++) {
printf("Nilai di number_pointers[%d] = %d\n", i, *number_pointers[i]);
}
return 0;
}
Dalam contoh ini, kita telah membuat sebuah array dari 5 pointer integer. Kita kemudian menetapkan alamat dari lima variabel integer ke pointer ini. Akhirnya, kita mencetak nilai yang ditunjuk oleh setiap pointer.
Ketika Anda menjalankan kode ini, Anda akan melihat:
Nilai di number_pointers[0] = 10
Nilai di number_pointers[1] = 20
Nilai di number_pointers[2] = 30
Nilai di number_pointers[3] = 40
Nilai di number_pointers[4] = 50
Apakah itu penyihir? Kita baru saja membuat array of pointers pertama kita!
Array of Pointers ke Integer
Sekarang bahwa kita telah mencoba untuk kaki kering, mari kita renjeki lebih dalam ke array of pointers ke integer. Ini sangat berguna ketika Anda ingin bekerja dengan beberapa array atau ketika Anda perlu mengurutkan array tanpa benar-benar memindahkan data.
Berikut adalah contoh yang menunjukkan bagaimana kita dapat menggunakan array of pointers ke integer untuk mengurutkan angka tanpa memindahkan data aktual:
#include <stdio.h>
void swap(int **a, int **b) {
int *temp = *a;
*a = *b;
*b = temp;
}
int main() {
int numbers[] = {50, 30, 20, 10, 40};
int *ptr[5];
// Menginisialisasi pointer
for(int i = 0; i < 5; i++) {
ptr[i] = &numbers[i];
}
// Mengurutkan pointer berdasarkan nilai yang mereka tunjuk
for(int i = 0; i < 5; i++) {
for(int j = i + 1; j < 5; j++) {
if(*ptr[i] > *ptr[j]) {
swap(&ptr[i], &ptr[j]);
}
}
}
// Mencetak nilai yang diurutkan
printf("Nilai yang diurutkan: ");
for(int i = 0; i < 5; i++) {
printf("%d ", *ptr[i]);
}
// Array asli tetap tidak berubah
printf("\nArray asli: ");
for(int i = 0; i < 5; i++) {
printf("%d ", numbers[i]);
}
return 0;
}
Kode ini menunjukkan penggunaan yang kuat dari array of pointers. Kita mengurutkan pointer berdasarkan nilai yang mereka tunjuk, secara efektif mengurutkan data tanpa memindahkan nilai asli. Itu seperti mengatur ulang tongkat penyihir tanpa mengganggu spell yang mereka panggil!
Array of Pointers ke Karakter
Selanjutnya, mari kita jelajahi array of pointers ke karakter. Ini sangat berguna ketika bekerja dengan string di C. faktanya, ketika Anda mendeklarasikan sebuah array of strings di C, yang Anda buat adalah sebuah array of pointers ke karakter!
Berikut adalah contoh untuk menggambarkan ini:
#include <stdio.h>
int main() {
char *fruits[] = {
"Apel",
"Pisang",
"Ceri",
"Kurma",
"elderberry"
};
int num_fruits = sizeof(fruits) / sizeof(fruits[0]);
printf("Keranjang buah kita berisi:\n");
for(int i = 0; i < num_fruits; i++) {
printf("%s\n", fruits[i]);
}
// Mari kita coba untuk mengubah sebuah buah
fruits[1] = "Blueberry";
printf("\nSetelah sedikit penyihir, keranjang buah kita sekarang berisi:\n");
for(int i = 0; i < num_fruits; i++) {
printf("%s\n", fruits[i]);
}
return 0;
}
Dalam contoh buah ini, kita telah membuat sebuah array of pointers ke karakter (string). Setiap elemen dari array fruits
adalah sebuah pointer ke karakter pertama dari nama masing-masing buah.
Magik di sini adalah bahwa kita dapat dengan mudah mengubah seluruh string hanya dengan mengubah pointer, seperti yang kita lakukan dengan "Pisang" ke "Blueberry". Itu seperti menukar seluruh buku spell dengan sekali sentuh tongkat kita!
Array of Pointers ke Struktur
Terakhir tapi tidak terkecuali, mari kita jelajahi penggunaan array of pointers yang paling kompleks – menunjuk ke struktur. Ini sangat kuat ketika Anda berhadapan dengan tipe data kompleks dan ingin memiliki fleksibilitas untuk mengmanipulasinya dengan efisiensi.
Berikut adalah contoh yang menunjukkan konsep ini:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct Wizard {
char name[50];
char spell[50];
int power;
};
int main() {
struct Wizard *wizard_pointers[3];
// Membuat dan menginisialisasi penyihir
for(int i = 0; i < 3; i++) {
wizard_pointers[i] = (struct Wizard*)malloc(sizeof(struct Wizard));
printf("Masukkan nama penyihir: ");
scanf("%s", wizard_pointers[i]->name);
printf("Masukkan spell kesukaan penyihir: ");
scanf("%s", wizard_pointers[i]->spell);
printf("Masukkan tingkat kekuatan penyihir: ");
scanf("%d", &wizard_pointers[i]->power);
printf("\n");
}
// Mencetak informasi penyihir
printf("Penyihir kuat kita:\n");
for(int i = 0; i < 3; i++) {
printf("Penyihir: %s, Spell Kesukaan: %s, Tingkat Kekuatan: %d\n",
wizard_pointers[i]->name,
wizard_pointers[i]->spell,
wizard_pointers[i]->power);
}
// Jangan lupa untuk membebaskan memori yang dialokasikan!
for(int i = 0; i < 3; i++) {
free(wizard_pointers[i]);
}
return 0;
}
Dalam contoh penyihir ini, kita telah membuat sebuah array of pointers ke struktur Wizard
. Ini memungkinkan kita untuk mengalokasikan memori secara dinamis untuk setiap penyihir dan mengakses propertinya menggunakan operator panah (->
).
Pendekatan ini memberikan kita fleksibilitas untuk membuat dan mengmanipulasi struktur data kompleks dengan mudah. Itu seperti memiliki sebuah buku spell yang dapat secara dinamis menambahkan spell baru saat kita belajar mereka!
Dan itu untuk saat ini, para pemrogram masa depan! Kita telah melakukan perjalanan melalui kerajaan array of pointers di C, dari dasar-dasar ke konsep yang lebih maju. Ingat, seperti setiap penyihir yang kuat, array of pointers memerlukan praktek untuk menguasainya. Jadi jangan khawatir untuk bereksperimen dan membuat program penyihir Anda sendiri!
Berikut adalah tabel referensi cepat dari metode yang kita pelajari:
Metode | Deskripsi |
---|---|
tipe_data *nama_array[ukuran]; |
Mendeklarasikan sebuah array of pointers |
nama_array[index] = &variable; |
Mengassign sebuah alamat kepada pointer di array |
*nama_array[index] |
Mengakses nilai yang ditunjuk oleh pointer di array |
nama_array[index]->member |
Mengakses anggota struktur yang ditunjuk oleh pointer di array |
Tetap berlatih, tetap curious, dan segera Anda akan menyebarkan program kompleks dengan mudah seperti seorang penyihir yang berpengalaman. Happy coding!
Credits: Image by storyset