Mari Kenalan Dengan Pointer Dalam C++

Assalamu'alaikum wr. wb

Selamat siang menjelang sore AG-Friends!!! Di cuaca yang cerah ini, kita (hah kita? lo aja kalee...) akan membuka lembaran baru dalam pemahaman membuat program dalam dunia C++. C++ ? Apa sih, bagi yang belum paham «baca disini». 

Materi yang akan dipelajari dalam posting kali ini adalah mengenai pointer. Pointer merupakan penunjuk kepada suatu variabel, pointer digunakan untuk menunjukkan alamat dari suatu variabel dan alamat itulah yang nantinya digunakan untuk menunjukkan lokasi suatu variabel. Lalu bagaimana kerjanya suatu pointer ? 

Pernahkah suatu hari berkendara atau hanya sekedar jalan kaki di sebuah jalan raya, kemudian melihat papan nama suatu tempat yang disitu terdapat alamat tempat tersebut ? Pernahkan pastinya. Mungkin ketika itu kita tidak peduli dengan papan nama tersebut karena kita memang tidak membutuhkannya. Lalu bagaimana dengan para pelancong yang keadaannya memang benar-benar baru masuk di wilayah tersebut ? Papan nama suatu tempat akan sangat berguna baginya. Dengan melihat alamat dari suatu tempat tersebut, pelancong akan mengetahui detail tempatnya dan segara mendatangi tempat tersebut.

Nah, seperti itulah kira-kira gambaran tentang fungsi dari pointer. Lalu apa guna dari sebuah penunjuk variabel ? Kadang kala, untuk memprogram suatu program yang besar, penghematan memory adalah suatu kewajiban mutlak. Dengan mengkopi nilai variabel satu ke variabel yang lainnya tentu akan sangat memboroskan memori, karena hal itulah mekanisme pointer ini suatu variabel dalam suatu fungsi dapat diakses dari fungsi lain.
  • Address of Variable

Seperti halnya bangunan-bangunan dalam dunia nyata, variabel-variabel dalam pemrograman juga menempati tempat-tempat tertentu dalam memori. Lalu kenapa sebuah variabel harus menempati tempat di memori ? Misal, jika kita mempunyai sebuah mobil atau sepeda, bukankan kita harus menyimpan / menjaga mobil kita di garasi kan ? Begitu juga variabel, variabel juga harus memiliki tempat atau lokasi untuk penyimpanan nilainya. Andai saja tidak ada lokasi, mungkinkah suatu variabel dapat menyimpan sebuah nilai ?



Sebuah lokasi sangat bersesuaian dengan alamat. Setiap lokasi mempunyai alamat bukan ? Contoh ada sebuah rumah di Jl. Mangga Gedung No. 3. Kemudian, ada seseorang ingin memarkir mobil di rumah tersebut, kira-kira kemanakah sopir membawa kendaraan tersebut, apakah ke Jl. Mangga Gedung No. 9 ? Tentu tidak, sopir akan membawa mobil tersebut ke Jl. Mangga Gedung No. 3 yang merupakan rumah bagi mobil tersebut dan sang sopir akan memasukannya ke dalam garasi rumah tersebut.

Demikian pula dengan variabel. Andaikan sebuah variabel memiliki lokasi memori di 0x0001. Jika kita inin memasukkan nilai 19 ke variabel a, maka processor harus membawa nilai variabel itu ke lokasinya, dimanakah itu ? Tentu di 0x0001.

Kemudian yang harus dipahami adalah bahwa setiap variabel ini ternyata memiliki kapling dalam memori yang berbeda-beda. Hal inilah yang disebut sebagai ukuran dari suatu memori «baca disini».  Misal suatu variabel bertipe data integer (int) yang memiliki ukuran memori 4 bytes dalam memori. Maka variabel tersebut akan menempati 4 kapling memori, yaitu di 0x0001, 0x0002, 0x0003 dan 0x0004. Jadi, jika ada variabel bertipe integer bersebelahah maka salah satunya (misal) akan menempati di ruang 0x0001 dan yang lainnya akan berada di 0x0005.

NB :
Memori menggunakan bilangan hexadesimal dalam menyatakan alamat dari suatu variabel. Hal ini ditandai dengan awalan 0x pada setiap alamat suatu memori. Karena itu apabila suatu variabel menempati blok ke 10 dalam memori, maka alamatnya adalah 0x0000a.

  • Deference
Lalu bagaimana caranya kita untuk bertanya tentang alamat dari suatu variabel ? Apakah kita harus ke kantor kelurahan terlebih dahulu untuk menanyakan alamat-alamat dari variabel yang kita punya, atau malah bertanya kepada presiden ? Ternyata variabel-variabel akan dengan senang hati memberikan alamatnya dengan mudah apabila kita bertanya :)

Di dalam C++ ada operator khusus yang digunakan untuk menanyakan suatu alamat variabel, yaitu operator deference (&). Nah, apabila kita memberi tanda '&' pada awalan sebuah variabel, maka variabel tersebut dengan senang sekali akan memberikan alamatnya. Penggunaannya dapat dilihat pada potongan kode dibawah ini :

...
int *x, y;
x = &y;
...

Variabel 'x' merupakan tempat penampungan untuk menyimpan alamat dari variabel 'y'. Seperti pada sebuah kertas yang digunakan untuk menampung / menuliskan huruf, angka ataupun gambar.

  • Reference 
Pada potongan script / source code diatas, bisa kita lihat bahwa variabel 'x' ditandai dengan tanda asterisk (*), suatu cara yang aneh dan tidak biasa dalam pembuatan variabel dalam pemrograman manapun bukan ? Lalau apa maksud dari hal itu ? 

Penggunaan asterisk sebelum nama variabel pada deklarasi suatu variabel adalah untuk menandakan bahwa variabel tersebut merupakan sebuah pointer. Pointer merupakan variabel khusus yang digunakan untuk menyimpan / menampung alamat suatu variabel. Nah, dengan modal alamat inilah pointer dapat mewakili langsung variabel yang alamatnya terdapat dalam pointer.

Namun, perlu kita ketahui bahwa walaupun memiliki tipe data yang sama, kita tidak bisa melakukan operasi pada pointer selayaknya kita melakukan operasi-operasi pada variabek-variabel umumnya. Karena seperti yang sudah dijelaskan pada keterangan diatas, bahwa pointer merupakan variabel yang khusus untuk menampung suatu alamat dari variabel.

Untuk pemahaman lebih lanjut perhatikan script dibawah ini :

/*
Program name : Pointer
Program By : AQIEM Group
Date : 23/09/2017
*/

#include"iostream"
using namespace std;
int main(){
//membuat variabel deference dan reference
int *x, y;
y = 100;
x = &y;
cout<<"Alamat dari y : "<<x<<endl;
system("pause");
return 0;
}

Source code diatas jika ditulis dalam Dev-C++ akan menghasilkan tampilan seperti dibawah ini :

Oke guys, cukup sekian tutorial kali ini yah. Bila ada saran, kritik atau komentar 'monggo' ditulis di kolom yang sudah tersedia. Sekian dan terimakasih....

Wasaalamu'alaikum wr. wb
Ahmad Istakim

Alumni dari jurusan Manajemen Informatika di Universitas Sains Al-Qur'an (UNSIQ ) Wonosobo. Tertarik dalam bidang pendidikan, teknologi komputasi dan disiplin ilmu keislaman ( Tafsir, Hadits, Arudl, Nahwu-Sharaf, Fiqh maupun Aqidah ) - https://s.id/blog-islamQ. Pernah juga mengenyam pendidikan di beberapa pesantren yang ada di Kab. Wonosobo dan Kab. Purworejo

Posting Komentar

Lebih baru Lebih lama