Pemanggilan Fungsi dengan Referensi di C

Hai teman-teman, para programer masa depan! Hari ini, kita akan mengemban perjalanan yang menarik ke dalam dunia pemrograman C, khususnya mengenal konsep "Pemanggilan Fungsi dengan Referensi." Jangan khawatir jika Anda masih pemula; saya akan memandu Anda langkah demi langkah, seperti yang saya lakukan untuk ribuan murid selama tahun-tahun pengajaran saya. Jadi, ambil minuman kesukaan Anda, duduk nyaman, dan mari kita masuk ke dalamnya!

C - Function call by reference

Operator Alamat (&) di C

Sebelum kita dapat memahami pemanggilan fungsi dengan referensi, kita perlu mengenal sebuah simbol yang sangat penting dalam C: tanda ampersand (&). Simbol kecil ini dikenal sebagai "operator alamat," dan itu seperti tongkat ajaib yang mengungkapkan lokasi rahasia variabel kita di memori komputer.

mari kita lihat contoh sederhana:

#include <stdio.h>

int main() {
int age = 25;
printf("Nilai age adalah: %d\n", age);
printf("Alamat age adalah: %p\n", &age);
return 0;
}

Dalam kode ini, kita tidak hanya mencetak nilai age (yang adalah 25), tapi juga alamatnya di memori. Penyandang format %p digunakan untuk mencetak alamat memori.

Ketika Anda menjalankan program ini, Anda mungkin melihat sesuatu seperti ini:

Nilai age adalah: 25
Alamat age adalah: 0x7ffd5e8e9944

Nomor aneh itu setelah "Alamat age adalah:" sebenarnya adalah alamat memori! Itu adalah tempat di mana komputer Anda memutuskan untuk menyimpan variabel age. Bayangkan itu sebagai alamat rumah variabel itu di lingkungan luas memori komputer Anda.

Apa Itu Pointer di C?

Sekarang kita tahu bagaimana mencari alamat variabel, mari bicarakan tentang pointer. Jika alamat adalah seperti alamat rumah, maka pointer adalah seperti navigator GPS yang dapat mengarahkan Anda ke alamat itu.

Dalam C, pointer adalah variabel yang menyimpan alamat memori variabel lain. Kita mendeklarasikan pointer dengan menggunakan simbol bintang (*).

Ini adalah contoh:

#include <stdio.h>

int main() {
int age = 25;
int *ptr_age = &age;

printf("Nilai age adalah: %d\n", age);
printf("Alamat age adalah: %p\n", &age);
printf("Nilai ptr_age adalah: %p\n", ptr_age);
printf("Nilai yang dipointer ptr_age adalah: %d\n", *ptr_age);

return 0;
}

Dalam kode ini, ptr_age adalah pointer yang menyimpan alamat age. Ketika kita menggunakan *ptr_age, kita meminta nilai yang disimpan di alamat yang ptr_age menunjukkan.

Hasilnya mungkin tampak seperti ini:

Nilai age adalah: 25
Alamat age adalah: 0x7ffd5e8e9944
Nilai ptr_age adalah: 0x7ffd5e8e9944
Nilai yang dipointer ptr_age adalah: 25

Lihat bagaimana alamat yang disimpan dalam ptr_age sama dengan alamat age? Itu karena ptr_age menunjuk ke age!

Bagaimana Pemanggilan Fungsi dengan Referensi Bekerja di C?

Sekarang kita mengenal pointer, kita dapat mengungkap pemanggilan fungsi dengan referensi. Ketika kita memanggil fungsi dengan referensi, kita sedang mempassing alamat variabel ke fungsi, bukan nilainya. Hal ini memungkinkan fungsi secara langsung mengubah variabel asli.

mari kita lihat contoh:

#include <stdio.h>

void increment(int *num) {
(*num)++;
}

int main() {
int x = 5;
printf("Sebelum increment: x = %d\n", x);
increment(&x);
printf("Setelah increment: x = %d\n", x);
return 0;
}

Dalam kode ini, kita mempassing alamat x ke fungsi increment. Fungsi kemudian menggunakan alamat ini untuk secara langsung mengubah nilai x.

Hasilnya akan menjadi:

Sebelum increment: x = 5
Setelah increment: x = 6

Fungsi increment dapat mengubah nilai x di fungsi main karena itu menerima alamat x, bukan hanya salinan nilainya.

Menggabungkan Pemanggilan Fungsi dengan Nilai dan Referensi

Dalam C, kita dapat menggabungkan pemanggilan fungsi dengan nilai dan referensi dalam fungsi yang sama. Ini dapat berguna ketika kita ingin mengubah beberapa parameter tetapi bukan yang lain.

Ini adalah contoh:

#include <stdio.h>

void modify(int *a, int b, int *c) {
(*a)++;
b++;
(*c)++;
}

int main() {
int x = 1, y = 2, z = 3;
printf("Sebelum modify: x = %d, y = %d, z = %d\n", x, y, z);
modify(&x, y, &z);
printf("Setelah modify: x = %d, y = %d, z = %d\n", x, y, z);
return 0;
}

Dalam contoh ini, x dan z dipassing dengan referensi, sedangkan y dipassing dengan nilai.

Hasilnya akan menjadi:

Sebelum modify: x = 1, y = 2, z = 3
Setelah modify: x = 2, y = 2, z = 4

Perhatikan bagaimana x dan z berubah, tapi y tetap sama? Itu karena fungsi hanya menerima salinan nilai y, bukan alamatnya.

Berikut adalah tabel yang menyajikan perbedaan antara pemanggilan fungsi dengan nilai dan referensi:

Aspek Pemanggilan Fungsi dengan Nilai Pemanggilan Fungsi dengan Referensi
Yang dipassing Salinan nilai Alamat variabel
Dapat mengubah asli Tidak Ya
Sintaks function(variable) function(&variable)
Parameter fungsi Variabel biasa Pointer

Dan itu saja! Kita telah melihat dasar-dasar pemanggilan fungsi dengan referensi di C. Ingat, seperti belajar keterampilan baru, praktik adalah kunci. Cobalah menulis fungsi Anda sendiri yang menggunakan pemanggilan dengan referensi, dan eksperimen dengan berbagai scenario. Sebelum Anda sadari, Anda akan dapat mengoperasikan alamat memori seperti seorang pro!

Selamat coding, dan semoga pointer Anda selalu menunjuk ke arah yang benar!

Credits: Image by storyset