Algoritma dan Struktur Data Pass by Value & Pass by Reference
Review Nilai sebuah variabel bisa diakses melalui dua cara Cara 1 : Langsung Cara 2 : Menggunakan pointer Is there any questions so far?
Review 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 using namespace std; #include <iostream> int main(){ // Bagian deklarasi variable int x; int *px; // Bagian badan program px=&x; x=10; cout << "Nilai variable x diakses secara langsung:"<< x; cout << "\nVariable x berada dialamat:"<< px; cout << "\nNilai variable x diakses melalui pointer:"<< *px; return 0; }
Program tanpa fungsi 1 2 3 4 5 6 7 8 9 10 11 12 13 14 #include <stdio.h> #include <conio.h> Int main(){ float panjang, lebar, luas; panjang = 10; lebar = 20 luas = panjang * lebar; cout << "Luas persegi = “ << luas ; getch(); }
Perhitungan luas diletakkan di bagian terpisah 1 2 3 4 5 6 7 8 9 10 11 12 13 14 #include <stdio.h> #include <conio.h> void main(){ float panjang, lebar, luas; panjang = 10; lebar = 20 luas = hitungluas(panjang, lebar); cout << "Luas persegi = “ << luas ; getch(); }
Fungsi untuk menghitung luas 1 2 3 4 5 6 float hitungluas(float p, l){ float l; l = p * l; return(l); }
Program menggunakan fungsi 1 2 3 4 5 6 7 8 9 10 11 12 13 void main(){ float panjang, lebar, luas; ….. luas = hitungluas(panjang, lebar); …. } float hitungluas(float p, float l){ float lu; lu = p * l; return(l);
Latihan Variabel atau data untuk main dan hitungluas terletak di bagian memori berbeda Keduanya tidak berhubungan Gambarkan keadaan memori untuk main dan hitungluas!
Pass by Value Jika kita mengubah nilai variabel p di hitungluas, apakah variabel panjang di main nilainya berubah?
Pass by Value 1 2 3 4 5 6 7 float hitungluas(float p, l){ float lu; lu = p * l; p = p * 2; return(lu); }
Pass by Value Pada saat main memanggil fungsi hitungluas, isi variabel panjang dan lebar dicopy kemudian dikirim ke hitungluas Di fungsi hitungluas, nilai tersebut dimasukkan ke variabel p dan l Merubah nilai p dan l tidak berakibat apa-apa pada variabel panjang dan luas Ingat, variabel main dan hitungluas terletak di bagian memori yang berbeda!
Pass by Reference Bagaimana cara mengubah nilai variabel panjang pada main dari fungsi hitungluas? Pada saat memanggil hitungluas, jangan mengirim nilai panjang Kirim alamat variabel panjang ke hitung luas Hitungluas dapat mengakses & mengubah isi variabel panjang milik main secara indirect
Program menggunakan fungsi 1 2 3 4 5 6 7 8 9 10 11 12 13 void main(){ float panjang, lebar, luas; ….. luas = hitungluas(&panjang, lebar); …. } float hitungluas(float *p, float l){ float lu; lu = (*p) * l; *p = (*p) * 2; return(l);
Pass by Reference Variabel v ada di fungsi F F memanggil fungsi G G perlu mengubah nilai v di F Jangan mengirim nilai v ke G Kirim alamat v G dapat mengakses v di F secara indirect G dapat mengubah nilai v di F
Latihan Buatlah fungsi untuk menukar isi dua variabel bertipe float!
Solusi 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 #include <stdio.h> #include <conio.h> void tukar(float *x, float *y); int main(){ float bil1, bil2; bil1 = 10; bil2 = 15; cout << “Bilangan 1 =“ << bil1 << “, bilangan 2 =“ << bil2 ; tukar(&bil1, &bil2); cout << “\nBilangan 1 =“ << bil1 << “, bilangan 2 =“ << bil2 ; getch(); return (0); } void tukar(float *x, float *y){ float temp; temp = *x; *x = *y; *y = temp;
Using a Pass by Value Is like giving someone the key to your home The key can be used by the other person to change the contents of your home! 17
Can you explain why? Additional Terms Pass-by-reference is also called . . . pass-by-address, or pass-by-location Can you explain why? 18