Pointer
Pointer
merupakan suatu tipe data dalam Pascal yang berfungsi untuk menunjuk
dan menyimpan alamat memori. Dalam penulisan pointer biasa digambar
dengan panah, sedangkan bagian memori yang ditunjuk digambar dengan
kotak, dan isinya ditulis di dalam kotak.
Bentuk umum dari deklarasi tipe pointer:
<nama_var> : ^<tipe_data>;
Untuk pointer tidak bertipe:
Suatu pointer dapat menunjuk ke data bertipe elementer, terstruktur, pointer yang lain, atau tidak bertipe. Jika suatu pointer tidak menunjuk ke mana-mana, pointer itu dinamakan dangling, sedangkan bagian memori yang tidak dapat diakses karena tidak ada pointer yang menunjuk dinamakan garbage (sampah).
Dalam Pascal, pointer dapat diisi dengan nilai yang berasal dari:
- NIL
- Fungsi Ptr
- Operator @
- Prosedur New dan GetMem
NIL merupakan reserved word dalam Pascal, di mana pointer yang bernilai
NIL dianggap tidak menunjuk alamat memori manapun.NIL biasa digambarkan
dengan lambang ground.
Function Ptr(Seg, Ofs : word) : pointer;
dengan Seg : segmen memori.
Fungsi Ptr mengembalikan pointer dari segmen dan offset yang dimasukkan. Operator @
<nama_var>:=@<variabel_yang_alamatnya_diambil>;
Operator ini digunakan untuk mengambil alamat variabel yang akan ditunjuk.
GetMem(var P : pointer, size : word);
Dengan P : pointer yang akan diisi.
Size : ukuran yang dipesan.
Prosedur New digunakan untuk memesan memori untuk pointer bertipe, sedangkan prosedur GetMem untuk pointer tidak bertipe. Kedua prosedur ini akan membentuk suatu variabel dinamik yang diletakkan dalam Heap. Heap adalah
memori-memori di komputer yang belum dialokasikan, yaitu memori yang
tidak digunakan oleh DOS, oleh program-program resident, oleh program
Turbo Pascal, internal stack yang digunakan oleh Turbo Pascal dan
variabel-variabel di data segmen.
Pointer yang belum digunakan sebaiknya diisi dengan NIL, dan untuk
pointer yang telah menunjuk sebuah alamat yang sudah dipesan memorinya,
isinya dapat dimanipulasi melalui pointer.
Mendeklarasikan Variabel Pointer
Suatu variabel pointer dideklarasikan dengan bentuk sebagai berikut :
tipe *nama_variabel
dengan
tipe dapat berupa sembarang tipe yang sudah dibahas pada bab-bab
sebelumnya, maupun bab-bab berikutnya. Adapun nama_variabel adalah nama
dari variabel pointer.
Sebagai contoh :
int *px; //contoh 1
char *pch1, *pch2; //contoh 2
Contoh
pertama menyatakan bahwa px adalah variabel pointer yang menunjuk ke
suatu data bertipe int, sedangkan contoh kedua masing pch1 dan pch2
adalah variabel pointer yang menunjuk ke data bertipe char.
Bentuk umum deklarasi pointer :
Type Pengenal = ^simpul ;
Simpul = tipe data ;
dengan pengenal : nama pengenal yang menyatakan tipe data pointer
simpul : nama simpul
tipe data : tipe data dari simpul
Tanda
^ di depan simpul harus ditulis apa adanya karena itu menunjukkan
bahwa pengenal bertipe pointer. Tipe data dari simpul dapat berupa tipe
data sebarang, misalnya char, integer, atau real.
Contoh :
Type Str30 = string[30] ;
Point = ^Data ;
Data = record
Nama_Peg : Str30 ;
Alamat : Str30 ;
Pekerjaan : Str30 ;
End ;
Var
P1, P2 : Point ;
A, B, C : Str30 ;
Mengatur Pointer agar Menunjuk ke Variabel Lain
Agar
suatu pointer menunjuk ke variabel lain, mula-mula pointer harus diisi
dengan alamat dari variabel yang akan ditunjuk. Untuk menyatakan alamat
dari suatu variabel, operator & (operator alamat, bersifat unary)
bisa dipergunakan, dengan menempatkannya di depan nama variabel. Sebagai
contoh, bila x dideklarasikan sebagai variabel bertipe int, maka:
&x . Berarti “alamat dari variabel x”. Adapun contoh pemberian
alamat x ke suatu variabel pointer px (yang dideklarasikan sebagai
pointer yang menunjuk ke data bertipe int) yaitu : px = &x;
Pernyataan
di atas berarti bahwa px diberi nilai berupa alamat dari variabel x.
Setelah pernyataan tersebut dieksekusi barulah dapat dikatakan bahwa px
menunjuk ke variabel x.
Mengakses Isi Suatu Variabel Melalui Pointer
Jika
suatu variabel sudah ditunjuk oleh pointer, variabel yang ditunjuk oleh
pointer tersebut dapat diakses melalui variabel itu sendiri
(pengaksesan langsung) ataupun melalui pointer (pengaksesan tak
langsung). Pengaksesan tak langsung dilakukan dengan menggunakan
operator indirection (tak langsung) berupa simbol * (bersifat unary).
Contoh penerapan operator * yaitu : *px
Yang
menyatakan “isi atau nilai variabel/data yang ditunjuk oleh pointer px”
. Sebagai contoh jika y bertipe int, maka sesudah dua pernyataan
berikut:
px = &x;
y = *px;
y akan berisi nilai yang sama
dengan nilai x. Kedua pernyataan di atas sebenarnya dapat digantikan
dengan sebuah pernyataan berupa :
y = x;
Seandainya pada program di atas tidak terdapat pernyataan:
px = &x;
namun terdapat pernyataan
y = *px;
maka y tidaklah berisi nilai x, sebab px belum diatur agar menunjuk ke variabel x.
Hal
seperti ini harap diperhatikan. Kalau program melibatkan pointer, dan
pointer belum diinisialisasi, ada kemungkinan akan terjadi masalah yang
dinamakan “bug” yang bisa mengakibatkan komputer tidak dapat
dikendalikan (hang). Selain itu tipe variabel pointer dan tipe data yang
ditunjuk harus sejenis. Bila tidak sejenis maka akan terjadi hasil yang
tidak diinginkan.
Belum ada tanggapan untuk "Pointer Dalam Pascal"
Posting Komentar