Dalam bahasa C dikenal dua cara melewatkan parameter ke dalam fungsi, yaitu berupa pemanggilan dengan nilai (call by value) dan pemanggilan dengan referensi (call by reference). Seperti telah ditulis sebelumnya bahwa parameter adalah variabel yang menyertai fungsi tersebut baik saat deklarasi maupun saat pemanggilan fungsi. Melewatkan parameter kedalam fungsi berarti kita menggunakan atau mengolah parameter tersebut melalui rutin program yang ada didalam fungsi.
1. Pemanggilan dengan Nilai
Pemanggilan parameter dengan nilai telah kita praktekkan pada tulisan sebelumnya khususnya pada tulisan tentang parameter formal dan aktual. Pada pemanggilan dengan nilai, kita hanya menyalin nilai dari parameter aktual ke parameter formal tanpa mengubah nilai pada parameter aktual tersebut. Dengan cara ini parameter aktual tidak akan berubah meskipun nilai pada parameter formal berubah-ubah.
Contoh Pemanggilan parameter dengan nilai :
#include <stdio.h>
void tukar(int,int);
int main ()
{
int a=5;
int b=9;
printf(“nilai sebelum pemanggilan fungsi :n”);
printf(“a = %d dan b = %dnn”,a,b);
tukar(a,b);
printf(“nilai setelah pemanggilan fungsi :n”);
printf(“a = %d dan b = %d”,a,b);
return 0 ;
}
void tukar(int x, int y)
{
int z;
z = x;
x = y;
y = z;
printf(“nilai diakhir fungsi tukar() :n”);
printf(“x = %d dan y = %dnn”,x,y);
}
Program diatas jika dijalankan akan menampilkan output berikut ini :
nilai sebelum pemanggilan fungsi :
a = 5 dan b = 9nilai diakhir fungsi tukar() :
x = 9 dan y = 5nilai setelah pemanggilan fungsi :
a = 5 dan b = 9
Terlihat bahwa nilai x dan y yang diambil dari a dan b memang telah tertukar melalui fungsi tukar, namun setelah pemanggilan fungsi tukar() nilai a dan b tetap alias tidak tertukar. Hal ini terjadi karena x dan y hanyalah nilai salinan dari a dan b. Artinya fungsi hanya melewatkan nilai dari parameter saja tanpa mengubah parameter aktualnya dalam hal ini a dan b.
2. Pemanggilan dengan Referensi
Pemanggilan dengan referensi merupakan upaya untuk melewatkan alamat dari suatu variabel kedalam fungsi. Dengan cara ini kita bisa mengubah isi sebuah variabel diluar fungsi dengan rutin program didalam fungsi. Untuk melakukannya kita memerlukan sebuah variabel pointer, yaitu sebuah variabel yang dipakai untuk penunjuk ke variabel lain atau lebih jelasnya variabel pointer adalah variabel yang berisi alamat dari variabel lain.
Contoh pemanggilan parameter dengan referensi :
#include <stdio.h>
void tukar(int *px, int *py);
int main ()
{
int a=5;
int b=9;
printf(“nilai sebelum pemanggilan fungsi :n”);
printf(“a = %d dan b = %dnn”,a,b);
tukar(&a,&b);
printf(“nilai setelah pemanggilan fungsi :n”);
printf(“a = %d dan b = %d”,a,b);
return 0 ;
}
void tukar(int *px, int *py)
{
int z;
z = *px;
*px = *py;
*py = z;
printf(“nilai diakhir fungsi tukar() :n”);
printf(“*px = %d dan *py = %dnn”, *px, *py);
}
Program diatas jika dijalankan akan menampilkan output berikut ini :
nilai sebelum pemanggilan fungsi :
a = 5 dan b = 9nilai diakhir fungsi tukar() :
*px = 9 dan *py = 5nilai setelah pemanggilan fungsi :
a = 9 dan b = 5
Berbeda dengan contoh sebelumnya saat pemanggilan dengan nilai, terlihat bahwa setelah pemanggilan fungsi kita mendapati nilai a dan b tertukar. Hal ini terjadi karena variabel *px dan *py menunjuk pada variabel a dan b, sehingga ketika kita menukarnya otomatis nilai variabel a dan b juga ikut tertukar.