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:
Untuk pointer bertipe:
<nama_var> : ^<tipe_data>;
Untuk pointer tidak bertipe:
<nama_var> : pointer;
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
Reserved word NIL
NIL merupakan reserved word dalam Pascal, di mana pointer yang bernilai
NIL dianggap tidak menunjuk alamat memori manapun.NIL biasa digambarkan
dengan lambang ground.
Fungsi Ptr
Sintaks:
Function Ptr(Seg, Ofs : word) : pointer;
dengan Seg : segmen memori.
Ofs : offset memori.
Fungsi Ptr mengembalikan pointer dari segmen dan offset yang dimasukkan. Operator @
Sintaks:
<nama_var>:=@<variabel_yang_alamatnya_diambil>;
Operator ini digunakan untuk mengambil alamat variabel yang akan ditunjuk.
Prosedur New dan GetMem
Sintaks:
New(var P : pointer);
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.
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 1Contoh 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.
char *pch1, *pch2; //contoh 2
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.
Sign up here with your email
Tata Cara Berkomentar :
- Komentar harus sesuai topik, tidak menyimpang !
- Jangan meletakkan link aktif pada komentar, karena itu spam !
- Tolong beritahukan Saya jika ada link, gambar, dll yang rusak !
Thanks You for visit.
Out Of Topic Show Konversi KodeHide Konversi Kode Show EmoticonHide Emoticon