Address dan Pointer adalah fitur ekslusif bahasa pemrograman C dan C++. Address dan pointer memiliki tiga fungsi utama, yaitu melokasikan objek baru, melemparkan/mengoper fungsi ke fungsi yang lainnya, dan melakukan perulangan atau loop elemen yang terdapat dalam array atau data struktur lain.
References:
Apa itu address? Dalam bahasa Inggris, address berarti alamat atau lokasi. Kali ini, kita akan mengambil lokasi dari sebuah variable dalam C++. Setiap variable pasti memiliki sebuah address di mana address itu adalah letak variable tersebut di dalam memori.
Cara menampilkan address
std::string benda = "kursi"; // "kursi"
std::cout << &benda; // output: 0x7ffe137a25f0 (value ini merupakan address untuk variable benda)
Operator &
merupakan kunci yang akan mengembalikan address dari sebuah variable, perlu diingat bahwa address ini akan terus berganti.
Reference: Tentang address
Apa itu pointer dalam C++? Pointer merupakan variable khusus untuk menyimpan address sebagai value-nya.
Cara mendeklarasikan Pointer
std::string benda = "kursi";
std::string* ptr = &benda; // ptr = 0x7ffe137a25f0
std::cout << ptr; // 0x7ffe137a25f0
Untuk pointer, operator *
merupakan kunci untuk mendeklarasikan sebuah variable bertipe pointer. Sama seperti variable yang lainnya, nama variable dari pointer ini tidak boleh sama.
Null Pointer
std::string* ptr = nullptr; // ptr = 0x0
Null pointer merupakan metode untuk mengosongkan address dari sebuah variable pointer atau tidak beralamat.
Mengambil value melalui pointer (dereferencing)
std::string benda = "kursi";
std::string* ptr = &benda; // ptr = 0x7ffe137a25f0
std::cout << *ptr; // "kursi"
Untuk mengambil value dengan address, kita harus mendeklarasikan operator *
sebelum memanggil pointer.
Pointer to Pointer
std::string benda;
std::string* ptr;
sdt::string** pptr;
benda = "kursi"
ptr = &benda; // ptr menyimpan address benda
pptr = &ptr; // pptr menyimpan address yang sama dengan ptr
std::cout << "Value yang terdapat dalam benda: " << benda << std::endl;
std::cout << "Value yang terdapat dalam *ptr: " << *ptr << std::endl;
std::cout << "Value yang terdapat dalam **ptr: " << **ptr << std::endl;
Output:
Value yang terdapat dalam benda: kursi
Value yang terdapat dalam *ptr: kursi
Value yang terdapat dalam **ptr: kursi
Metode Pointer to Pointer ini mengharuskan kita untuk menambah *
lagi seperti **ptr
, Pointer to Pointer merupakan metode untuk mengakses address dari sebuah pointer sehingga membentuk seperti sebuah rantai pointer.
References:
#include <iostream>
int main(){
// deklarasikan angka yang akan diakses oleh pointer dan variable dari angka yang akan diganti
int num = 20;
int val;
// deklarasikan pointer dan simpan address num ke dalamnya
int* ptr;
ptr = #
// ganti nilai val dengan nilai num menggunakan ptr
val = *ptr;
std::cout << "Nilai dari val adalah " << val; // Output: Nilai dari val adalah 20
}
topik lanjutan pada pointer bisa dilihat disini