Pemahaman Pass By Value dan Pass By Reference

Download Report

Transcript Pemahaman Pass By Value dan Pass By Reference

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
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!
Additional Terms
• Pass-by-reference
is also called . . .
– pass-by-address, or
– pass-by-location
Can you explain why?