Program Call by Reference C++ - nblognlife

Program Call by Reference C++

Contoh Program Call by Reference C++

Hal-hal yang perlu diketahui tentang Pemanggilan Secara Referensi (Call by Reference)
  • Pemanggilan secara Referensi merupakan upaya untuk melewatkan alamat dari suatu variabel ke dalam fungsi.
  • Yang dikirimkan ke fungsi adalah alamat letak dari nilai datanya, bukan nilai datanya.
  • Fungsi yang menerima kiriman alamat ini akan mengunakan alamat yang sama untuk mendapatkan nilai datanya.
  • Perubahan nilai di fungsi akan merubah nilai asli di bagian program yang memanggil fungsi.
  • Pengiriman parameter secara referensi adalah pengiriman dua arah, yaitu dari fungsi pemanggil ke fungsi yang dipanggil dan juga sebaliknya.

Berikut contoh program C++ Call by Reference :

/*
       Program Call by Reference
       Microsoft Visual Studio Express 2012
       N.N. Blog
*/
#include <iostream>
using namespace std;
#include <conio.h>

//sebelumnya void Rtukar (int *bil1, int *bil2), saya ganti untuk mempermudah dalam menjelaskan
void Rtukar (int *R_bil1, int *R_bil2)
{
       int temp;
       temp = *R_bil1;
       *R_bil1 = *R_bil2;
       *R_bil2 = temp;
       cout<<"Nilai pada saat berada di fungsi Rtukar : "<<endl;
       cout<<"Nilai bilangan 1 = "<<*R_bil1<<" | Alamat bilangan 1 = "<<R_bil1<<endl;
       cout<<"Nilai bilangan 2 = "<<*R_bil2<<" | Alamat bilangan 2 = "<<R_bil2<<endl;
       cout<<endl;
}

int main()
{
       int bil1,bil2;
       bil1 = 7;
       bil2 = 6;

       cout<<"\tCALL BY REFERENCE"<<endl;
       cout<<"\t-----------------"<<endl;
       cout<<"\nNilai sebelum pemanggilan fungsi Rtukar : "<<endl;
       cout<<"Nilai bilangan 1 = "<<bil1<<" | Alamat bilangan 1 = "<<&bil1<<endl;
       cout<<"Nilai bilangan 2 = "<<bil2<<" | Alamat bilangan 2 = "<<&bil2<<endl;
       cout<<endl;

       Rtukar (&bil1,&bil2);

       cout<<"Nilai setelah pemanggilan fungsi Rtukar : "<<endl;
       cout<<"Nilai bilangan 1 = "<<bil1<<" | Alamat bilangan 1 = "<<&bil1<<endl;
       cout<<"Nilai bilangan 2 = "<<bil2<<" | Alamat bilangan 2 = "<<&bil2<<endl;
       cout<<endl;

       _getche();
       return EXIT_SUCCESS;
}

Output
       CALL BY REFERENCE
       -----------------

Nilai sebelum pemanggilan fungsi Rtukar :
Nilai bilangan 1 = 7 | Alamat bilangan 1 = 0090FBF8
Nilai bilangan 2 = 6 | Alamat bilangan 2 = 0090FBEC

Nilai pada saat berada di fungsi Rtukar :
Nilai bilangan 1 = 6 | Alamat bilangan 1 = 0090FBF8
Nilai bilangan 2 = 7 | Alamat bilangan 2 = 0090FBEC

Nilai setelah pemanggilan fungsi Rtukar :
Nilai bilangan 1 = 6 | Alamat bilangan 1 = 0090FBF8
Nilai bilangan 2 = 7 | Alamat bilangan 2 = 0090FBEC


PENJELASAN

Sebelumnya, perlu diketahui setiap variabel yang diciptakan akan disimpan ke dalam blok memori, dan setiap blok memori mempunyai alamatnya sendiri.

- Pada Call by reference, argumen (parameter aktual) yang digunakan untuk memanggil fungsi Rtukarberupa alamat dari variabel bil1 dan bil2 >>>> Rtukar (&bil1,&bil2);
Perhatikan parameter formal pada fungsi Rtukar
void Rtukar (int *R_bil1, int *R_bil2)
{
...
}

int *R_bil1int *R_bil2 merupakan deklarasi varibel pointer yang menunjuk ke integer, jadi ketika fungsi Rtukar dipanggil melalui fungsi main dengan Rtukar (&bil1,&bil2); maka argumen/parameter aktual tersebut akan ditangkap oleh parameter formal fungsi Rtukar yaitu int *R_bil1int *R_bil2, sehingga sebenarnya secara implisit terjadi proses seperti berikut:

R_bil1 = &bil1 //varibel R_bil1 pada fungsi Rtukar menunjuk alamat dari variabel bil1
R_bil2 = &bil2 //varibel R_bil2 pada fungsi Rtukar menunjuk alamat dari variabel bil2



Selanjutnya pada fungsi Rtukar terjadi pengubahan nilai (ISI dari alamat yang dikirimkan) dengan cara penukaran melalui pernyataan :

temp = *R_bil1; 
//dibaca nilai temp = ISI/NILAI dari alamat yang ditunjuk oleh variabel R_bil1 (artinya nilai dari varibelbil1), yaitu 7 -> identik dengan temp = bil1
temp = 7

*R_bil1 = *R_bil2; 
//dibaca ISI/NILAI variabel dari alamat yang ditunjuk oleh varibel R_bil1 (artinya nilai dari variabelbil1) = ISI/NILAI dari alamat yang ditujuk oleh varibel R_bil2 (artinya nilai dari varibel bil2), yaitu 6 -> identik dengan bil1 = bil2
bil1 = 6

*R_bil2 = temp; 
//dibaca ISI/NILAI dari alamat yang ditunjuk oleh varibel R_bil2 (artinya nilai dari variabel bil2) = nilaitemp, yaitu 7 -> identik dengan bil2 = temp
bil2 = 7

Sehingga terjadilah penukaran nilai.

Penukaran nilai varibel dengan menggunakan bantuan variabel temp analoginya sama dengan ketika kita mempunyai gelas A yang berisi jus wortel dan gelas B yang berisi jus melon. Maka untuk menukarkan isi kedua gelas tersebut kita memerlukan gelas C (gelas kosong) sebagai “gelas bantuan”. Mulanya kita pindahkan isi gelas A ke gelas C, kemudian setelah gelas A kosong kita pindahkan isi gelas B ke gelas A, kemudian gelas setelah gelas B kosong baru kita pindahkan isi gelas C ke gelas B. Sehingga sekarang isi gelas A adalah jus melon, sedangkan isi gelas B adalah jus wortel.

PENTING!
     Perhatikan output pada call by reference, bilangan 1 dan bilangan 2  pada fungsi main maupun fungsi Rtukar menempati alamat yang sama, sehingga pengubahan nilai dimanapun (di fungsi main maupun fungsi Rtukar) akan mempengaruhi nilai dari bilangan 1 dan bilangan 2.

Jadi, apabila pemanggilan dilakukan menggunakan referensi maka pengubahan nilai variabel pada fungsi Rtukar juga akan mengubah nilai variabel pada fungsi main.

[RS]

Klik Like & Share jika postingan ini bermanfaat
Apa tanggapan Anda?

Berikan tanggapan Anda melalui kolom komentar yang telah disediakan.
- Gunakan bahasa yang sopan;
- Saat menjadikan postingan pada blog ini sebagai referensi, jangan lupa mencantumkan sumbernya (link dari blog ini).

Jika blog ini bermanfaat jangan lupa memberikan 'like' atau 'share' untuk mendapatkan update terbaru.

Terima kasih