Pengertian Pass by Address
Pass by address kadang juga disebut sebagai Pass by pointer. adalah salah satu metode untuk memberikan argument kepada function parameter saat pemanggilan function, dengan memanfaatkan pointer dereference *
.
Contoh Penulisan
//function parameter int myFunction (int *par){ } //function parameter myFunction(&var);
Function parameter merupakan sebuah variable, hal yang berbeda antara function parameter dan variabel hanyalah pada penepatanya. Karena function parameter merupakan variabel, maka saat pembuatan function parameter kita juga dimungkinkan untuk menggunakan operator dereference, untuk membuat function parameter berupa variabel pointer.
Pointer merupakan variabel yang dapat menunjuk ke sebuah alamat memori, atau dalam pengertian lain yaitu, variabel yang memiliki kemampuan untuk memiliki alamat memori sebagai nilai dari variabel pointer tersebut. dari variabel pointer kita dimungkinkan untuk mengakses nilai dari alamat memori yang ditunjuk.
Dalam segi pemberian argument kepada function parameter mirip seperti metode pass by value, ketika kita memberikan argument kepada function parameter, apa yang terjadi adalah nilai dari argument yang diberikan akan disalin dan diberikan kepada function parameter.
Tapi ketahui bahwa pointer hanya dapat menyimpan alamat memori sebagai nilai dari variabel pointer dan, perbedaanya antara pass by value dan pass by address adalah, nilai yang disalin pada metode pass by address merupakan alamat memori.
Contoh Program :
#include <iostream> using namespace std; void myFunction(int *x) { *x = *x+1; cout<<"x = "<<x<<" = "<<*x<<endl; } int main() { int a=2; cout<<"a = "<<&a<<" = "<<a<<endl; myFunction(&a); cout<<"a = "<<&a<<" = "<<a<<endl; }
Cara mengoperasikan variabel pointer pada function parameter masih sama seperti kita mengoperasikan variabel pointer dengan metode Lvalue dan Rvalue.
int *lvalue = &rvalue;
Untuk memberikan nilai yang berupa alamat memoir dari sebuah variabel ke sebuah variabel pointer, meskipun variabel pointer tersebut merupakan function parameter, kita tetap akan membutuhkan operator Address-of &
.
Pada contoh program di atas kita diperlihatkan kemampuan dari penggunaan pemberian argument dengan metode pass by address. Pada program di atas function parameter x
memiliki kemampuan dapat mengakses variabel a
yang diberikan sebagai argument, Meskipun variabel tersebut berada pada luar function.
Pada program di atas kita diperlihatkan bahwa function parameter x
dapat mengubah dan melihat nilai dari variabel a
yang berada di luar function dan diakses secara langsung.
Contoh Program
#include <iostream> using namespace std; void cetakArrayInt(int *theArr, int panjang) { //Jika argumen adalah null if(!theArr){ cout<<"Array tidak ditemukan"<<endl; return; } //jika array kosong if(!panjang){ cout<<"Array kosong"<<endl; return; } for(int i=0; i<panjang; i++){ cout<<theArr[i]<<" "; } } int main() { int myArr[]={2, 3, 5, 8, 1}; cetakArrayInt(myArr, sizeof(myArr)/sizeof(int)); return 0; }
Setelah penyampain 3 artikel, yaitu pass by value, pass by reference dan pass by address. Bertujuan untuk memberikan pemahaman, cara-cara dan metode yang mungkin dapat anda gunakan di masa mendatang.
Dari ketiga metode tersebut masing-masing memiliki kelebihan dan kekurangan. tapi penulis tidak mencoba untuk menyampaikan perbandingan dan mencari tau metode yang terbaik untuk digunakan, karena ketiga metode tersebut saling melengkapi dan masing-masing berguna dalam dalam situasi tertentu.
Pada situasi apa saja yang cocok untuk menggunakan 3 metode tersebut ? :
- Jika akan memberikan argument yang memiliki tipe data dasar, cukup gunakan Pass by value.
- Jika akan memberikan argument yang merupakan class, struct dan argument yang cukup memakan banyak memori, gunakan Pass by reference.
- Jika akan memberikan argument yang berupa array, gunakan pass by address atas pass by reference.
- Jika akan membuat argument yang nilainya tidak bisa diubah, gunakan pass by value atau anda juga bisa gunakan pass by address dan reference dengan mengubah function parameter menjadi literal/konstanta.
- Jika akan membuat nilai dari argument yang diberikan dapat di ubah, jangan gunakan pass by value.