Call by Value, Call by Reference, Call by Pointer

Gw beberapa waktu yang lalu dapet pertanyaan dari junior gw di kampus tentang bedanya call by value, call by reference, & call by pointer di bahasa pemrograman C/C++. Gw udah ngejelasin langsung ke orangnya sih, tapi berhubung mungkin masih ada orang lain di luar sana yang belum ngerti (gw berani taruhan pasti ada), gw jelasin lagi di sini dah.

Kita mulai dari call by value. Kita-kita yang mulai belajar bahasa C/C++ pasti mulai dari sini waktu kita belajar cara make function. Untuk call by value, parameter di function yang kita buat bakal punya nilai yang sama dengan variabel yang kita input ke dalam functionnya.

void callbyval (int param)
{
param = 15;
}

Gimana jadinya kalau function di atas kita panggil dari main? Kita coba bikin program main yang isinya begini.

int main ()
{
int a=10;
callbyval(a);
cout<<a;
getchar();
return 0;
}

Berapa nilai variabel a yang bakal ditampilin dalam programnya waktu kita run nanti? 10? Atau 15? Berhubung variabel param yang ada di dalam function callbyval itu punya alamat memory yang beda dengan variabel a yang ada di main, nilai variabel a yang ada dalam main masih tetap 10.

Sekarang, gimana jadinya kalau kita punya function di bawah ini?

void callbyref (int &param)
{
param = 15;
}

Lalu function itu kita panggil dari program ini.

int main ()
{
int a=10;
callbyref(a);
cout<<a;
getchar();
return 0;
}

Kalau program di atas ini dijalanin, nilai variabel a yang ditampilin di program bakal jadi 15. Kenapa bisa begitu? Waktu function callbyref dipanggil, function ini bakal nerima alamat memory tempat variabel a disimpan dalam RAM. Variabel param yang ada di function callbyref bakal punya alamat memory yang sama dengan variabel a yang ada di main, karena itu kalau kita ngubah nilai variabel param di dalam function callbyref nilai variabel a yang ada di main ikut berubah. Ini yang namanya call by reference.

Berikutnya, call by pointer.

void callbypoint (int *param)
{
*param = 15;
}

Lalu kita panggil function di atas dari main (lagi).

int main ()
{
int a=10;
callbypoint(&a);
cout<<a;
getchar();
return 0;
}

Sama dengan function callbyref di penjelasan sebelumnya, function callbypoint ini juga bakal ngubah nilai variabel a yang ada di main. Bedanya, variabel param di function callbyref tadi punya alamat memory yang sama dengan variabel a di main sementara variabel param di function callbypoint itu variabel pointer yang punya alamat beda dengan alamat variabel a di RAM. Lalu kenapa variabel param di function callbypoint bisa dipake ngubah nilai variabel a yang ada di main?

Variabel param yang ada di callbypoint emang nggak punya alamat memory yang sama dengan variabel a yang ada di main, tapi variabel param itu variabel pointer. Berhubung variabel param itu variabel pointer, dia bisa nunjuk ke alamat memory variabel a. Karena itu dari variabel param kita bisa ngubah isi dari alamat memory yang ditempatin variabel a tadi.

Pengalaman gw sendiri sih, gw lebih demen bikin function itu call by reference daripada call by pointer. Selain diketiknya lebih gampang, eksekusi function call by reference lebih cepet kalo dibandingin dengan eksekusi function call by pointer. Tapi nggak semua yang bisa dilakuin function call by pointer bisa juga dilakuin function call by reference, karena itu harus diliat juga kapan kita harus make function call by reference & kapan kita harus make function call by pointer.

One thought on “Call by Value, Call by Reference, Call by Pointer

  1. Pingback: C, C++, C#, Java | Twisted Pair

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s