Home / Pemrograman / C / Perbedaan Passing by Value dan Passing by Reference

Perbedaan Passing by Value dan Passing by Reference

Pada saat belajar bahasa pemrograman C, Anda pasti akan mempelajari tentang fungsi. Tentunya Anda telah mengetahui tentang fungsi dengan parameter input. Pada fungsi dengan parameter input kita mengenal dua macam istilah yang mungkin belum kita pahami, yaitu passing by reference dan passing by value. Apa itu ? Saya tidak akan jelaskan maksud dari kedua istilah tersebut, namun saya akan jelaskan perbedaannya melalui contoh program agar Anda lebih memahami kedua istilah tersebut.
Untuk lebih mempermudah pemahaman Anda, terlebih dahulu tuliskan sourcecode di bawah ini. Pada sourcecode di bawah ini terdapat dua buah fungsi, yang pertama merupakan contoh fungsi passing by value dan yang satu lagi merupakan fungsi passing by reference.

#include &lt;stdio.h&gt;<br />#include &lt;stdlib.h&gt;<br /><br />void fungsiPassingValue(int a, int b);<br />void fungsiPassingReference(int *a, int *b);<br /><br />int main() {<br /> int varA = 1, varB = 2; // Deklarasi variabel<br /> printf("Passing by valuen");<br /> printf("Nilai sebelum pemanggilan fungsin");<br /> printf("varA = %d varB = %dn",varA ,varB); // Pemanggilan fungsi passing by value, parameter input berupa variabel<br /> printf("Nilai di dalam fungsin");<br /> fungsiPassingValue(varA,varB);<br /> printf("Nilai sesudah pemanggilan fungsin");<br /> printf("varA = %d varB = %dnn",varA ,varB);<br /> printf("Passing by referencen");<br /> printf("Nilai sebelum pemanggilan fungsin");<br /> printf("varA = %d varB = %dn",varA ,varB);<br /> printf("Nilai di dalam fungsin");<br /> fungsiPassingReference(&amp;varA,&amp;varB); // Pemanggilan fungsi passing by reference, parameter input berupa alamat memori dari variabel <br /> printf("Nilai sesudah pemanggilan fungsin");<br /> printf("varA = %d varB = %dnn",varA ,varB);<br /> system("pause");<br /> return 0;<br />}<br /><br />// Ini adalah fungsi passing by value<br />// Parameter input berupa variabel<br />void fungsiPassingValue(int a, int b){<br /> a = 0;<br /> b = 0;<br /> printf("varA = %d varB = %dn",a ,b);<br />}<br /><br />// Ini adalah fungsi passing by reference<br />// Parameter input berupa pointer<br />void fungsiPassingReference(int *a, int *b){<br /> *a = 0;<br /> *b = 0;<br /> printf("varA = %d varB = %dn",*a ,*b);<br />}<br />

Dari sourcecode di atas dapat kita lihat perbedaan fungsi passing by value dan passing by reference. Fungsi passing by value mendeklarasikan parameter inputan yang berupa variabel, sedangkan fungsi passing by reference mendeklarasikan parameter inputan yang berupa pointer (ingat ada tanda bintang didepan berarti pointer).

void fungsiPassingValue(int a, int b); // Parameter input berupa data/variabel<br />void fungsiPassingReference(int *a, int *b); // Parameter input berupa alamat memori/pointer<br />

Kedua fungsi diatas sama-sama akan menampilkan data walaupun yang satu parameter inputnya berupa variabel dan yang satu lagi parameter inputnya berupa pointer. Dalam pemanggilan fungsi, fungsi dengan passing by value cukup menginputkan nama variabel (varA dan varB) pada parameter inputnya. Namun untuk memanggil fungsi passing by reference kita harus menyertakan tanda & di depan nama variabel, karena yang bakal kita inputkan adalah alamat dari variabel (varA dan varB) ingat kembali pembahasan pointer pada postingan saya disini http://eko-rudiawan.com/pointer-di-bahasa-pemrograman-c/
Lalu bagaimana dengan data sebelum dan setelah pemanggilan fungsi ? Jika diperhatikan setelah program dijalankan fungsi passing by value tidak akan merubah nilai dari variabel yang diinputkan ke parameter input fungsi.

Namun fungsi passing by reference setelah fungsinya dipanggil dan dijalankan maka nilai variabel yang diinputkan (varA dan varB) juga akan ikut berubah mengikuti nilai yang berada di dalam fungsi. Kenapa bisa terjadi seperti itu ? Ingat fungsi passing bay reference mendeklarasikan parameter input berupa pointer, berarti jika kita memanggil fungsi tersebut kita harus memasukkan alamat memori pada parameter inputnya (bukan data/variabel yang diinputkan). Karena yang diinputkan merupakan alamat memori maka secara otomatis alamat memori varA = a dan alamat memori varB = b. Sehingga jika data pada salah satunya berubah otomatis variabel yang satunya juga berubah karena alamat memori keduanya adalah sama. Oleh karena itu setelah keluar dari fungsi kenapa nilai varA akan sama dengan nilai a yang berada di dalam fungsi, begitu juga dengan nilai varB dan b.

Semoga penjelasan singkat di atas dapat membuat Anda paham tentang fungsi dengan passing by value dan passing by reference. Terima kasih:)

About Eko Rudiawan

Seorang lelaki yang punya ketertarikan dengan dunia elektronika dan robot yang saat ini sedang serius belajar tentang dunia bisnis dan internet marketing. My dream to be success technopreneur

Check Also

Software Bahasa C Di Linux Untuk Belajar Pemrograman

Software Bahasa C Di Linux Belajar bahasa pemrograman C tidak hanya bisa dilakukan pada sistem …

5 comments

  1. terimakasih atas penjelasannya..

  2. hmm gitu ya, okeh aku praktekkan hehe

  3. hmm, ane udah bisa memahaminya Gan ^_^
    suwun

  4. siip bro mampir monggo suhudsukses.blogspot.com

Leave a Reply

Your email address will not be published. Required fields are marked *

3 + nine =