Mengirimkan Pointer ke Fungsi di C

Halo para pemrogram berprestasi! Hari ini, kita akan melakukan perjalanan yang menarik ke dunia pemrograman C, khususnya fokus pada pengiriman pointer ke fungsi. Jangan khawatir jika Anda baru mengenal hal ini; saya akan memandu Anda melalui setiap langkah dengan penuh perhatian seperti seorang guru berpengalaman yang telah membantu banyak siswa untuk mengerti konsep ini. Jadi, mari kita mulai!

C - Passing Pointers to Functions

Keuntungan Mengirimkan Pointer ke Fungsi

Sebelum kita terlibat dengan kode, mari kita mengerti mengapa mengirimkan pointer ke fungsi adalah hal yang penting dalam pemrograman C. Bayangkan Anda membagikan resep kepada seorang teman. Daripada memberikan mereka salinan dari seluruh buku resep, Anda hanya memberikan mereka nomor halaman. Itu hampir sama dengan apa yang kita lakukan dengan pointer!

Berikut adalah keuntungan utama:

  1. Kecerdasan Memori: Mengirimkan pointer seperti memberikan arah saja bukan peta yang utuh. Ini menggunakan memori yang lebih sedikit karena kita hanya mengirimkan alamat, bukan data utuh.

  2. Kecepatan: Lebih cepat untuk mengirimkan alamat kecil daripada potongan data yang besar.

  3. Kemampuan Mengubah Data Asli: Ketika Anda mengirimkan pointer, fungsi dapat mengakses dan mengubah data asli secara langsung.

  4. Bekerja dengan Struktur Data Besar: Untuk struktur data besar seperti array atau struct, mengirimkan pointer jauh lebih efisien.

Contoh Mengirimkan Pointer ke Fungsi

Mari kita mulai dengan contoh sederhana untuk melihat bagaimana ini bekerja dalam praktek:

#include <stdio.h>

void ubahNilai(int *ptr) {
*ptr = 100;
}

int main() {
int num = 10;
printf("Sebelum: %d\n", num);

ubahNilai(&num);
printf("Setelah: %d\n", num);

return 0;
}

Dalam contoh ini, kita mengirimkan alamat dari num ke fungsi ubahNilai. Fungsi kemudian mengubah nilai di atas alamat itu menjadi 100. Ketika kita menjalankan program ini, kita akan melihat:

Sebelum: 10
Setelah: 100

Menakjubkan, bukan? Kita baru saja mengubah variabel di fungsi main dari dalam fungsi lain!

Swap Nilai dengan Mengirimkan Pointer

Sekarang, mari kita mengambil masalah pemrograman klasik: menukar dua nilai. Ini adalah tempat pointer benar-benar bersinar!

#include <stdio.h>

void swap(int *a, int *b) {
int temp = *a;
*a = *b;
*b = temp;
}

int main() {
int x = 5, y = 10;
printf("Sebelum swap: x = %d, y = %d\n", x, y);

swap(&x, &y);
printf("Setelah swap: x = %d, y = %d\n", x, y);

return 0;
}

Di sini, fungsi swap mengambil pointer ke dua integer. Kemudian, fungsi ini menggunakan pointer ini untuk menukar nilai. Outputnya akan adalah:

Sebelum swap: x = 5, y = 10
Setelah swap: x = 10, y = 5

Itu seperti sihir, tapi itu hanya adalah kekuatan pointer!

Mengirimkan Pointer Array ke Fungsi

Array dan pointer di C sangat dekat. Ketika kita mengirimkan array ke fungsi, kita sebenarnya mengirimkan pointer ke elemen pertamanya. Mari kita lihat ini dalam aksi:

#include <stdio.h>

void cetakArray(int *arr, int size) {
for (int i = 0; i < size; i++) {
printf("%d ", arr[i]);
}
printf("\n");
}

int main() {
int numbers[] = {1, 2, 3, 4, 5};
int size = sizeof(numbers) / sizeof(numbers[0]);

printf("Elemen array adalah: ");
cetakArray(numbers, size);

return 0;
}

Dalam contoh ini, numbers secara otomatis dikonversi menjadi pointer saat dikirimkan ke cetakArray. Outputnya akan adalah:

Elemen array adalah: 1 2 3 4 5

Mengirimkan Pointer String ke Fungsi

Di C, string adalah hanya array karakter, jadi mengirimkan pointer string bekerja sama seperti mengirimkan pointer array. Berikut adalah contoh:

#include <stdio.h>

void cetakString(char *str) {
while (*str != '\0') {
printf("%c", *str);
str++;
}
printf("\n");
}

int main() {
char greeting[] = "Halo, Dunia!";
printf("Pesan sambutan adalah: ");
cetakString(greeting);

return 0;
}

Ini akan menghasilkan:

Pesan sambutan adalah: Halo, Dunia!

Mengirimkan Pointer Struct ke Fungsi

Akhirnya, mari kita lihat bagaimana kita dapat mengirimkan pointer ke struct. Ini sangat berguna saat menghadapi struktur data yang kompleks:

#include <stdio.h>

struct Person {
char name[50];
int age;
};

void birthday(struct Person *p) {
p->age++;
}

int main() {
struct Person john = {"John Doe", 25};

printf("Sebelum ulang tahun: %s adalah %d tahun\n", john.name, john.age);

birthday(&john);

printf("Setelah ulang tahun: %s adalah %d tahun\n", john.name, john.age);

return 0;
}

Dalam contoh ini, kita mengirimkan pointer ke struct Person ke fungsi birthday. Fungsi kemudian meningkatkan umur orang itu. Outputnya akan adalah:

Sebelum ulang tahun: John Doe adalah 25 tahun
Setelah ulang tahun: John Doe adalah 26 tahun

Dan itu adalah! Kita telah menyinggung dasar-dasar mengirimkan pointer ke fungsi di C. Ingat, praktek membuat perfect, jadi jangan takut untuk bereksperimen dengan konsep ini. Happy coding!

Method Deskripsi Contoh
Mengirimkan Pointer Dasar Mengirim alamat variabel untuk mengubah mereka secara langsung void ubahNilai(int *ptr)
Swap Nilai Menggunakan pointer untuk menukar nilai antara dua variabel void swap(int *a, int *b)
Mengirimkan Pointer Array Mengirim array ke fungsi secara efisien void cetakArray(int *arr, int size)
Mengirimkan Pointer String Bekerja dengan string di fungsi void cetakString(char *str)
Mengirimkan Pointer Struct Mengubah struktur data kompleks secara efisien void birthday(struct Person *p)

Credits: Image by storyset