Pointer Di Pascal DASAR TEORI
45
E.1. Deklarasi Variabel Pointer
Bentuk umum:
Var Nama Var : TipeData
Contoh:
Var P : integer;
Pendeklarasian variabel pointer tidak jauh berbeda dengan pendeklarasian biasa, hanya perlu ditambahkan simbol topi sebelum tipe datanya. Simbol topi
tersebut menandakan bahwa variabel tersebut menunjuk ke lokasi tertentu pada memori. Dapat digambarkan variable P seperti ditunjukkan pada diagram berikut:
P Variabel pointer dapat pula dibuat yang tipe record. Pendeklarasiannya
adalah seperti berikut: Bentuk Umum:
Type NamaPointer=
NamaRecord; NamaRecord = Record
item1 : TipeData1; item2 : TipeData2;
….. itemN : TipeDataN;
End; Var
Namavar : NamaPointer;
46
Contoh:
Type Str30
= String[30];
Point =
Data; Data = record
Nama : string[24]; Alm : string[30];
Pekerjaan: string[30];
End; Var
P1,P2 :
point; A,B,C
: string[30];
Pada contoh diatas, P1 dan P2 masing-masing bertipe pointer, sedang A,B,C perubah statis bertipe string.
Pada saat program dikompilasi, perubah P1 dan P2 akan menempati lokasi tertentu dalam pengingat. Kedua perubah ini masing-masing belum
menunjuk ke suatu simpul. Pointer yang belum menunjuk ke suatu simpul nilainya dinyatakan dengan nil.
Untuk mengalokasikan simpul dalam pengingat, statemen yang digunakan adalah statemen new, yang mempunyai bentuk umum:
New perubah;
Dengan perubah adalah nama perubah yang bertipe pointer. Sebagai contoh, dengan deklarasi perubah seperti diatas dan statemen:
NewP1; NewP2;
Maka sekarang dipunyai dua buah simpul yang ditunjuk oleh P1 dan P2. P1
P2 Program ini kemudian menyerahkan nilai ke dua item data tersebut
dalam sembarang cara dengan menggunakan referensi P1 dan P2. Sebagai PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
47
contoh, pernyataan berikut akan menyerahkan nilai 2.0 ke item yang ditunjuk dengan P1 dan menambah 1 ke nilai tersebut, menyimpan hasilnya ke dalam item
data yang ditunjuk dengan P2:
P1 := 2.0; P2 := P1 + 1.0;
Isi memori dapat digambarkan sebagai berikut: 2.0
P1 P2
3.0 Variabel pointer dapatr digunakan sebagai argumen ke prosedur new.
Variable pointer dapat dapat digunakan dalam pernyataan penugasan, disediakan dua variable yang mempunyai tipe sama. Asumsikan P1 dan P2 menunjuk ke item
data, seperti ditunjukkan dalam contoh sebelumnya. Pernyataan tersebut:
P2 := P1;
Akan menyebabkan P1 dan P2 menunjuk ke item data yang sama, seperti ditunjukkan:
P1 P2
2.0 3.0
Maka isi dari P2 yang berupa alamat telah diganti dengan nilai yang berupa alamat yang dikandung dari P1. yang terjadi adalah item data yang
sebelumnya ditunjuk dengan P2 masih ada, tetapi tidak ada cara untuk mengakses isi tersebut.
Salah satu keistimewaan yang sangat berguna pada tipe data pointer adalah kemampuan untuk melekatkan pointer ke dalam record. Keistimewan ini
akan sangat penting dalam menerapkan struktur data abstrak. Sebagai contoh, PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI
48
andaikata akan membuat dua record dengan cara seperti itu bahwa satu record menunjuk ke record berikutnya, seperti ditunjukkan dalam diagram berikut ini:
pertama Salah satu cara untuk membuat nilai awal inisialisasi elemen dengan
menggunakan:
NewPertama; Pertama.Nama:= ’Ina’;
Pada saat ini keadaan bagian memori sebagai berikut: Pertama
Ina ?
Isi pada pertama.nama sudah didefinisikan, tetapi isi pada pertama.Berikut bagian pointer pada record belum didefinisikan pada tahap ini. Sekarang dapat
membuat record lain untuk data berikut dengan menggunakan variable Temp:
NewTemp; Temp.Nama:=’Ira’;
Bagian memori sekarang menjadi Pertama
Temp Ina
? Ira
?
Sekarang adalah melengkapi record yang mengandung ‘Ina’ dan record yang mengandung ‘Ira’. Isi dari pertamaberikut memerlukan penunjuk ke data yang
ditunjuk dengan Temp. Dapat dibuat hubungan tersebut dengan sangat sederhana sebagai berikut:
Pertama.Berikut := temp;
Susunan memori tersebut sekarang menjadi : Pertama
Temp Ina
Ira ?
49
Sekarang dapat melengkapi struktur tersebut dengan menempatkan nil ke dalam bagian pointer berikut pada lemen terakhir;
Temp.berikut := nil;
Bagian memori tersebut pada saat ini ditunjukkan struktur yang telah komplit: Pertama
E.2. Proses Variabel Pointer
Pada pembahasan diatas telah diterangkan bagaimana mendeklarasikan variabel pointer dan bagaimana menginisialisasikan variabel pointer
menggunakan prosedur new. Cara lain untuk menginisialisasikan variabel pointer adalah dengan menggunakan konstanta pointer yaitu nil. Jika variabel pointer
diserahi nilai nil, ini berarti bahwa tidak menunjuk dimanapun juga, artinya pointer tidak menunjuk ke item data. Jika P merupakan variabel pointer,
pernyataan
P := nil;
Menyebabkan nilai P diset ke nil. Nilai nil untuk variabel pointer disimbolkan dalam memori dengan diagram sebagai berikut:
P Hal yang penting untuk mengerti perbedaan antara variable pointer yang
belum didefinisikan dan variabel pointer yang mempunyai nilai, isi dari variabel yang belum didefinisikan sama dengan dideklarasikan tapi tidak ada nilainya
sebelum diserahi suatu nilai ke variabel tersebut tidak diketahui. Prosedur new membuat item data dan menetapkan nilai pada variabel pointer. Penyerahan nilai
Ina Ira
50
nil ke variabel pointer juga menetapkan nilai variabel pointer tersebut, tetapi tidak demikian jika tanpa mengalokasikan hubungan ke item data.
Sebelumnya dikatakan bahwa memungkinkan untuk menggunakan memori kembali dalam head yang tidak diperlukan, ini dilakukan dengan
menggunakan prosedur Dispose, yang membebaskan penunjuk item data dengan parameternya dan mengeset parameter ke nil. Bentuk prosedur Dispose:
Disposevariable_pointer;
Sebagai contoh, andaikan PtrP1 dan PtrP2 menunjuk item data real, seperti ditunjukkan:
P1 2.0
P2 3.0
3.0 Setelah eksekusi pada prosedur dispose untuk PtrP1, seperti”
Dispose PtrP1;
Nilai PtrP1 akan mnjadi nil, dan ruangan yang telah dialokasikan untuk variable tersebut akan dikembalikan ke kelompoknya pada ruangan yang dapat digunakan
dan dialokasikan kembali jika diperlukan. Pada penunjuk ini diagram memorinya sebagai berikut:
P1 3.0
P2 Andaikata ingin mempunyai PtrP1 menunjuk ke item data yang sama
dengan PtrP2 dan membebaskan penunjuk data dengan PtrP1. Hal pertama harus menggunakan prosedur dispose, seperti ditunjukkan segmen program berikut:
Dispose PtrP1;
PtrP1 := PtrP2;
51
Setelah eksekusi prosedur dispose ini, memori akan kelihatan sebagai berikut: P1
3.0 P2
Kemudian, setelah eksekusi pada pernyataan penugasan tersebut memori akan tampak sebagai berikut:
P1 P2
3.0 PLAGIAT MERUPAKAN TINDAKAN TIDAK TERPUJI