__ __ /\ \ ___ ___ ___ __ __ __ ___ _ __ /\_\ \_\ \ / __`\ /' __` __`\ /'__`\ /'_ `\ /'__`\ / __`\/\`'__\ \/\ \ /'_` \ /\ \L\ \/\ \/\ \/\ \/\ __//\ \L\ \/\ \L\.\_ __/\ \L\ \ \ \/ __\ \ \/\ \L\ \ \ \____/\ \_\ \_\ \_\ \____\ \____ \ \__/.\_\/\_\ \____/\ \_\/\_\\ \_\ \___,_\ \/___/ \/_/\/_/\/_/\/____/\/___L\ \/__/\/_/\/_/\/___/ \/_/\/_/ \/_/\/__,_ / /\____/ \_/__/ OMEGA|ZINE RELEASE 02 Author: 5ynl0rd || administrator[at]voidnetwork[dot]org Online @ www.omega.or.id :: http://ezine.omega.or.id == Function (pass by value & pass by reference) == [ pass by value ] Saya asumsikan pembaca sudah mengerti definisi fungsi khususnya pada bahasa C. Pada pelewatan parameter berdasarkan nilai (pass by value), terjadi penyalinan nilai dari parameter formal (parameter yg terdapat pada pendefinisian fungsi) ke parameter aktual (parameter yg terdapat pada saat pemanggilan fungsi). Hal ini akan menyebabkan nilai variabel yg dihasilkan oleh proses di dalam fungsi tidak akan berpengaruh terhadap nilai variabel yg terdapat diluar fungsi. Perhatikan contoh berikut: SNIP-------------------> #include void increment(int X) { X++; printf("nilai di dalam fungsi = %d",X); } int main(void) { int bilangan; printf("masukkan bilangan bulat: "); scanf("%d",&bilangan); /*menampilkan nilai awal */ printf("\nNilai awal = %d\n",bilangan); /*memanggil fungsi increment*/ increment(bilangan); /*menampilkan nilai akhir*/ printf("\nNilai akhir = %d\n",bilangan); return 0; } EOF-------------------> output: SNIP------------------> masukkan bilangan bulat: 89 Nilai awal = 89 nilai di dalam fungsi = 90 Nilai akhir = 89 EOF-------------------> disini terlihat bahwa nilai dari variabel bilangan tetap bernilai 89 walaupun kita memanggil fungsi increment. Hal ini disebabkan variabel bilangan dan variabel X merupakan dua variabel yg tidak saling berhubungan dan menempati alamat memori yg berbeda, sehingga yg terjadi hanyalah proses penyalinan nilai dari variabel bilangan ke variabel X. Oleh sebab itu perubahan nilai variabel X tentu tidak akan mempengaruhi nilai variabel bilangan [ Pass by reference ] berkebalikan dengan pass by value. parameter yg dimasukkan berupa alamat memori (bukan nilai). Perhatikan contoh berikut: SNIP------------------------------------> #include void increment(int *X) { (*X)++; printf("nilai di dalam fungsi = %d",*X); } int main(void) { int bilangan; printf("masukkan bilangan bulat: "); scanf("%d",&bilangan); /*menampilkan nilai awal */ printf("\nNilai awal = %d\n",bilangan); /*memanggil fungsi increment*/ increment(&bilangan); /*menampilkan nilai akhir*/ printf("\nNilai akhir = %d\n",bilangan); return 0; } EOF-------------------------------------> output: SNIP------------------------------------> masukkan bilangan bulat: 89 Nilai awal = 89 nilai di dalam fungsi = 90 Nilai akhir = 90 EOF-------------------------------------> perubahan nilai di dalam fungsi akan mempengaruhi nilai diluar fungsi. *greetz to you!