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_bil1, int *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_bil1, int *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
*Baca
postingan saya tentang pointer http://nblognlife.blogspot.co.id/2014/12/program-pointer-sederhana.html
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.
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