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:
1. NIL
2. Fungsi Ptr
3. Operator @
4. Prosedur New dan GetMem
5. Pointer yang lain
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. 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.
Linked List
Linked
List (daftar berkait) adalah
suatu node (simpul) yang menunjuk ke node (simpul) berikutnya dalam suatu
urutan. Suatu node minimal harus mempunyai 2 komponen, yaitu:
1. Satu atau lebih field yang berisi data di daftar
berkait.
2. Satu atau lebih field berupa pointer yang menunjuk
ke node lainnya. Field
yang berupa
pointer ini disebut dengan link.
Untuk mendefinisikan linked list biasa digunakan
record, dengan sintaks:
Type <nama_pointer> = ^<nama_rec>;
<nama_rec> = record
data1 : <tipe_data1>;
data2 : <tipe_data2>;
. . . .
next : <nama_pointer>;
end;
Masing-masing
kotak pada linked list disebut node (simpul), node paling depan disebut head,
node belakang disebut tail. Untuk mengisi linked list kosong maupun mengakhiri
linked list biasanya digunakan nilai NIL. Operasi-operasi yang terdapat pada
linked list antara lain:
1. Inisialisasi; yaitu mengisi variabel list dengan
NIL.
2. Menambah node.
3. Menyisipkan node.
4. Menghapus node yang berisi data.
5. Membaca data dari node.
6. Menghapus seluruh isi list.
1.
Screenshot
Program
1.1 Tampilan saat program
dijalankan
1.2 Tampilan Saat angka diinput
1.3 Tampilan Akhir Program
1.
Source
Code
Program Pointer_tidak_bertipe;
Uses crt;
Var
p : Pointer;
q : ^Byte;
r : array [0..100] of Byte;
i,n : Byte;
Begin
Clrscr;
GetMem(p, 20);
q := p;
Write('Input angka : '); readln(n);
Clrscr;
For i := 0 to n do
Begin
r[i] := n - i;
q^ := n - i;
inc(q);
End;
q := p;
For i := 0 to n do
Begin
Write('r[ ', i ,' ] = ', r[i], ':
');
Writeln('p^ ke-', i ,' = ', q^);
inc(q);
End;
Readln;
End.
|