Penggunaan pointer C++
Pernahkah anda mendengar linked list? Linked list bekerja menggunakan pointer yang dihubungkan dengan address atau alamat memori lainnya sehingga membentuk rantai variabel yang digunakan sebagai array yang memiliki sifat dinamis.
Selain vaiabel yang hanya menyimpan nilai, C++ juga memiliki variabel yang menyimpan alamat variabel lain. Variabel yang menyimpan alamat dari variabel lain ini biasa disebut dengan pointer.
Selain vaiabel yang hanya menyimpan nilai, C++ juga memiliki variabel yang menyimpan alamat variabel lain. Variabel yang menyimpan alamat dari variabel lain ini biasa disebut dengan pointer.
Pointer ada di seluruh tipe data seperti tipe data int, float, char, double dan sebagainya. Pointer juga dapat menunjuk class, struct, dan variabel bentukan lainnya.
Dengan menggunakan pointer dapat meningkatkan kinerja operasi yng dilakukan secara berulang. Penggunaan pointer di gunakan untuk mengalokasikan tempat pada memori secara dinamis yang dapat diubah-ubah alokasi tempatnya pada memori.
Pointer juga berguna sebagai parameter fungsi yang artinya nilai dapat diubah di dalam fungsi. Variabel pointer adalah variabel yang dapat diubah alamatnya (variabel dinamis).
Pada bahasa tingkat tinggi lainnya seperti java sudah tidak memiliki variabel pointer. Jadi bagaimana java menangani program yang membutuhkan pointer? Java menggunakan fungsi pass by reference yang penggunaanya hampir sama dengan pointer.
Apa itu pointer ?
Pointer adalah tipe data yang di dalamnya menyimpan address atau alamat dari variabel lain. Namun apa yang terjadi jika kita mengoperasikan pointer dengan penjumlahan, pengurangan, pembagian atau perkalian?
Untuk menjawab pertanyaan diatas lebih mudah dimengerti jika kita langsung mencobanya dalam bahasa pemrograman.
Untuk menjawab pertanyaan diatas lebih mudah dimengerti jika kita langsung mencobanya dalam bahasa pemrograman.
Cara menggunakan pointer
Pada bahasa C penggunaan pointer hanya dengan cara menambahkan tanda bintang /'*' sebelum nama variabel dibuat. Untuk mendapatkan alamat dari variabel yang diinginkan hanya dengan menambahkan tanda dan /'&' sebelum variabel. Untuk lebih jelasnya lihat potongan program berikut ini:
#include <iostream>
int main() {int a = 10;int *b;b = &a;std::cout << "value a : " << a << std::endl;std::cout << "value b : " << *b << std::endl << std::endl;std::cout << "alamat a : " << &a << std::endl;std::cout << "alamat b : " << b << std::endl;}
Sebelum melihat hasilnya, coba tebak hasil yang didapatkan dari program diatas.
Seperti yang sudah dijelaskan sebelumnya pointer menyimpan alamat jadi jika kita print hasil b (tanpa & dan *) maka akan menunjukan alamat dari a. Sedangkan jika kita ingin mengetahui alamat dari b dengan cara menambahkan tanda '&' sebelum variabel di print.
Uniknya untuk variabel array, dengan menambahkan pointer dapat berpindah ke array setelahnya. Lihat contoh:
#include <iostream>
int main() {
int a[] = {1,2,3,4,5} ;
int *b;
b = a;
std::cout << "value a : " << a[0] << std::endl;
std::cout << "value b : " << *b << std::endl << std::endl;
std::cout << "alamat a : " << &a << std::endl;
std::cout << "alamat b : " << b << std::endl << std::endl;
b = b + 1;
std::cout << "value a : " << a[1] << std::endl;
std::cout << "value b : " << *b << std::endl << std::endl;
std::cout << "alamat a : " << &a[1] << std::endl;
std::cout << "alamat b : " << b << std::endl << std::endl;
}
Kenapa bisa begitu? Penjelasannya sederhana. Pada array data tersimpan secara berurutan.
Kenapa alamat kedua memiliki selisih 4? Jika anda pernah melihat bit penyimpanan pada setiap variabel, anda pasti tahu berapa bit yang digunakan dalam tipe data integer. Integer membutuhkan 32 bit atau 4 byte dalam memori. Sehingga selisih variabel sesudah dan sebelum adalah 4 byte (alamat memori menunjukkan byte).
Operasi pointer
Seperti yang telah kita ketahui pointer menyimpan alamat memori, jadi untuk mengakses value dari alamat memori yang disimpan pointer dengan menggunakan tanda bintang / '*'. Perhatikan contoh dibawah ini :
Cobalah menebak hasil dari value a? Karena pointer menyimpan alamat dari a, maka saat kita mengubah nilai dari *b (dengan bintang), variabel a juga akan mengikuti perubahan yang terjadi di b.
Pada pembahasan mengenai fungsi dan sub fungsi sebelumnya sudah dijelaskan mengenai pass by reference yang konsepnya menggunakan pointer. Pada pass by reference parameter yang digunakan sebagai pemanggil juga terganti karena alamat parameter yang digunakan.
Baca Juga : Penggunaan Sub Program dan Fungsi
Untuk mengukur pemahaman silakan coba jawab pertanyaan berikut ini.
Sekian pembahasan mengenai pointer dalam bahasa C++ berikut ini. Terima kasih.
#include <iostream>
int main() {
int a = 10;
int *b;
b = &a;
std::cout << "value a : " << a << std::endl;
std::cout << "value b : " << *b << std::endl << std::endl;
std::cout << "alamat a : " << &a << std::endl;
std::cout << "alamat b : " << b << std::endl << std::endl;
*b = *b * 10;
std::cout << "value a : " << a << std::endl;
std::cout << "value b : " << *b << std::endl << std::endl;
std::cout << "alamat a : " << &a << std::endl;
std::cout << "alamat b : " << b << std::endl << std::endl;
}
Cobalah menebak hasil dari value a? Karena pointer menyimpan alamat dari a, maka saat kita mengubah nilai dari *b (dengan bintang), variabel a juga akan mengikuti perubahan yang terjadi di b.
Pada pembahasan mengenai fungsi dan sub fungsi sebelumnya sudah dijelaskan mengenai pass by reference yang konsepnya menggunakan pointer. Pada pass by reference parameter yang digunakan sebagai pemanggil juga terganti karena alamat parameter yang digunakan.
Baca Juga : Penggunaan Sub Program dan Fungsi
Untuk mengukur pemahaman silakan coba jawab pertanyaan berikut ini.
#include <iostream>
int main() {
int a = 10;
int *b;
b = &a;
std::cout << "value a : " << *(&a)+(*b*10) << std::endl;
}
Sekian pembahasan mengenai pointer dalam bahasa C++ berikut ini. Terima kasih.
Berkomentarlah secara bijak.
EmoticonEmoticon