Saturday, April 25, 2015

Pointer Berbintang di C++ - Part I

Yang dimaksud pointer berbintang disini adalah ******p. Secara sederhana jika hanya mempunyai satu bintang *p, maka assignnya p=&q, dengan q adalah variabel biasa tanpa bintang yang mempunyai jenis variabel yang sama dengan p. Mari kita buat contohnya di dev c++ berikut :
Kalo programmnya di running (tekan F11) :
Hasilnya :
Terlihat pointer p kita bernilai 17 yang nilainya sama dengan variabel q yang nilainya juga 17. So disini kelihatan bahwa untuk pointer bintang 1 ini diassign dengan variabel tanpa bintang. Heumm... mari kita lihat masing2 alamat dari variabel p dan q, untuk itu tambahkan kode berikut dalam program :
Biar g' salah paham, Alamat fisik maksudnya adalah lokasi/alamat suatu variabel dalam memory komputer kita. Dari potongan program di atas (line 11 - 12), klu kita mw ngeliad alamat fisik, itu pake tanda ampersand(&) didepan variabelnya, baik itu untuk pointer ataupun non pointer. Contohnya &p yang berupa pointer dan &q yang bukan pointer. Dan untuk pointer, klu mw ngeliad alamat yang ditunjuknya g' ush pake apa-apa didepannya lngsung aj variabelnya. Klu kita running hasilnya :
Nah...dari gambar diatas juga kliatan klu alamat yang ditunjuk oleh pointer p adalah alamat dari variabel q yaitu 0x28FF08. Dan kalo alamat yang ditunjuk oleh pointer p sama dengan alamat q, berarti kedua variabel tersebut saling berhubungan. Makanya klu misalkan q kita ubah nilainya, maka nilai dari pointer p pun ikut berubah. Berikut contohnya :
Klu di-running :
Terus klu pointer p yang nilainya di ubah :
Daan.. hasilnya :
Kliatan klu nilai pointer p atau q salah satunya diubah, maka yang lain juga ikut berubah....

Ok... mari melangkah ke bintang pointer bintang 2............................
Sederhananya pointer bintang 2 itu adalah pointer yang dapat menyimpan alamat dari pointer bintang 1. Contohnya :
Dalam kode diatas, pointer bintang 1 b diassign alamat dari variabel c, selanjutnya alamat b ini dimasukin ke pointer bintang 2 a seperti yang terlihat pada line 35. Hasilnya :
**a menampilkan nilai dari c yang sebelumnya diambil dari b. *a sendiri masih menyimpan alamat yaitu alamat dari variabel c. Disini kita lihat bahwa *a itu menyimpan alamat fisik dari variabel bukan pointer. Jadi bisa saja *a = &c. Contohnya seperti terlihat dalam kode berikut :
Di line 46 dibuat variabel baru yaitu d yang kemudian. Berarti sekarang nilai a itu adalah 55 yang berasal dari d. Dan karena a terhubung juga dengan b, maka nilai b juga ikut berubah menjadi 55 yang menunjukkan bahwa alamat yang disimpan oleh b adalah dari variabel d seperti terlihat di bawah :
Nah masih ada satu lagi cara assign ke pointer bintang 2 ini yaitu *a = e, dimana e adalah pointer bintang 1. Sebenarnya cara assign seperti ini hampir sama dengan a = &b (line 35).
Klu di-run :
Nah....terlihat *a itu nyimpen alamat dari variabel yang simpen oleh pointer e. Alamat yang disimpan oleh e sendiri adalah alamat dari variabel f yang nilainya 90. Makanya **a bernilai 90. Dan terlihat juga nilai a = 0x28FF00 yang merupakan alamat dari fisik dari pointer b. Lhooooo...berarti a dan masih terhubung dunk, dan pointer b sendiri menyimpan alamat fisik dari variabel d (lihat hasil kode line 53). Sooo..kalo nilai **a = 90, berarti nilai b juga adalah 90. Dan karena b terhubung dengan d berarti d juga jadi 90....?? Mari kita lihat alamat yang disimpen oleh pointer b dan nilainya seperti pada kode di bawah :
Hasil :
Terlihat nilai sesuai dugaan yaitu 90. Tetapi nilai d tetap 55. Karena seperti terlihat diatas, alamat fisik yang disimpen oleh b sekarang bukanlah alamat dari d tetapi alamat f. Berarti b dan d itu sudah tidak terhubung tepat ketika kode diline 58 dieksekusi, *a = e; Dari sini kita dapat membuat diagram sebagai seperti terlihat di bawah :
Cukup sekian untuk part I ini.....
Kesimpulan sementara adalah pointer bintang n dapat diassing dengan pointer bintang (n -1)

Go to Part II

No comments:

Post a Comment