Friday, 1 January 2016

Fungsi : Passing Parameter by Value & by Reference

Share it Please
DASAR TEORI
Pemanggilan  dengan  nilai  merupakan  cara  yang  dipakai  untuk  seluruh  fungsi buatan  yang  telah  dibahas  pada  praktikum  sebelumnya.  Pada  pemanggilan  dengan  nilai, nilai  dari  parameter  aktual  akan  disalin  ke  parameter  formal.  Dengan  cara  ini  nilai parameter aktual tidak bisa dirubah sekalipun nilai parameter formal berubah. Untuk lebih jelasnya lihat pada fungsi tukar() pada contoh berikut ini. 


#include <stdio.h>

void tukar (int, int);

main()
{
  int a = 88, b = 77;
    
  printf("Nilai sebelum pemanggilan fungsi\n");
  printf("a = %d    b = %d\n", a, b);
  
  tukar(a,b); 
printf("\nNilai setelah pemanggilan fungsi\n");
  printf("a = %d    b = %d\n", a, b);
}

void tukar(int x, int y)
{
  int z;
  
  z = x;
  x = y;
  y = z;
  
  printf("\nNilai di akhir fungsi tukar()\n");
  printf("x = %d    y = %d\n", x, y);
}

Tampak  bahwa  sekeluarnya  dari  pemanggilan  fungsi tukar(),  variabel a  dan  b  (yang dilewatkan  ke  fungsi tukar()  tidak  berubah,  walaupun  pada  fungsi tukar()  telah  terjadi penukaran antara parameter x dan y .  Mengapa  hal ini bisa terjadi ?  Sebab x hanyalah salinan  dari a  dan y  adalah  salinan  dari b  (Lihat  gambar  15.1).    Pada  saat  pemanggilan fungsi, maka : 
a) x  bernilai 88 (nilai a) 
b) y bernilai 77 (nilai b) 

Sesudah pernyataan-pernyataan berikut dijalankan, maka :
z = x;
x = y;
y = z;

x akan bernilai 77 dan y bernilai 88.

Gambar  tersebut  menjelaskan  bahwa a  dan  b  tidak  berubah.  Yang  berubah  hanyalah parameter x dan y.
  Pemanggilan  dengan  referensi  (call  by  reference)  merupakan  upaya  untuk melewatkan  alamat  dari  suatu  variabel  ke  dalam  fungsi.    Cara  ini  dapat  dipakai  untuk mengubah isi suatu variabel di luar fungsi dengan pelaksanaan pengubahan dilakukan di dalam fungsi.  Sebagai contoh perhatikan program tukar2.c yang merupakan modifikasi dari tukar1.c.  Perubahan yang pertama
terletak dalam definisi fungsi, yang kini berupa

void tukar(int *px, int *py)
{
    int z;
  
  z = *px;
  *px = *py;
    *py = z;
  
  printf("\nNilai di akhir fungsi tukar()\n");
    printf("x = %d    y = %d\n", *px, *py);
}

Adapun perubahan dalam parameter aktualnya menjadi :
  tukar(&a,&b);      //alamat a dan alamat b

Dalam deklarasi parameter
  int *px, int *py

menyatakan bahwa px dan py adalah suatu variabel pointer.  Yang dimaksudkan sebagai variabel  pointer  adalah  suatu  variabel  yang  menunjuk  ke  variabel  lain.    Lebih  jelasnya, variabel pointer berisi alamat dari variabel lain.
  Adapun pada pemanggilan fungsi, &a dan &b  masing-masing berarti  "alamat a" dan "alamat b".  Dengan pemanggilan seperti ini, hubungan antara variabel pointer px dan py dengan variabel a dan b adalah seperti ditunjukkan pada gambar di bawah ini  Dalam hal  ini, px  dikatakan  menunjuk  variabel  a  dan  py menunjuk  variabel b.  Ilustrasi penempatan di memory untuk masing-masing variabel ditunjukkan pada gambar 15.2.



No comments:

Post a Comment

Followers

Follow The Author