var p1: ^Integer; // Pointer to integer
p2: ^Real; // Pointer to real number
px: Pointer // Untyped pointer
Variabel p1 adalah variabel dengan tipe pointer to integer, artinya nilai yang ditunjuk oleh p1 adalah nilai bertipe integer. Variabel p2 adalah pointer to real, artinya nilai yang ditunjuk oleh variabel ini adalah bilangan real. Semetera variabel px adalah untyped pointer, artinya tipe yang ditunjuk oleh variabel pointer ini tidak ditentukan. Variabel bertipe untyped pointer akan kompatibel dengan variabel pointer bertipe apapun. Menggunakan utyped pointer pada umumnya lebih fleksibel tetapi kurang aman.
Mengambil nilai yang ditunjuk oleh sebuah variabel pointer biasanya disebut sebagai dereferencing pointer. Untuk melakukan dereferencing pointer, kita harus menggunakan simbol ^. Bila p adalah pointer, maka p^ adalah nilai yang ditunjuk oleh p. Kita bisa mengisi sebuah pointer dengan alamat variabel lain, atau kita bisa mengalokasikannya dari heap memory. Untuk mengambil alamat dari suatu variabel tertentu, kita dapat menggunakan simbol @. Dengan demikian @a berarti alamat dari variabel a. Ada sebuah nilai konstanta khusus yang disebut dengan nil, yang berarti pointer tindak menunjuk ke manapun. Perhatikan contoh berikut ini
var
a: Integer;
p1, p2, p3: ^Integer;
begin
p1 := @a;
p2 := p1;
p2^ := 100;
p3 := nil;
end;
Pada langkah pertama, p1 diisi dengan alamat dari a (@a). Jadi setelah langkah pertama tersebut, pointer p1 menunjuk ke variabel a. Langkah kedua p2 diisi dengan nilai p1. Ini berarti p2 menunjuk ke a juga. Langkah ketiga p2^ diisi dengan 100. Artinya alamat di memori yang ditunjuk oleh p2 diisi dengan sebuah nilai interger 100. Setelah perintah ini, nilai a, nilai p1^, maupun p2^ adalah sama, yaitu 100. Langkah keempat, p3 diisi nil sehingga p3 sekarang tidak menunjuk kemana-mana. Perlu dicatat disini bahwa variabel pointer tidak diinisialisasi, sehingga isinya bisa menunjuk ke alamat tertentu yang tidak valid. Perkecualian diberikan kepada variabel pointer yang dimiliki oleh objek, dimana nilainya diinisialisasi dengan nil.
Operator dalam Pointer
Beberapa operator yang dapat dioperasikan dengan pointer adalah sebagai berikut
^, Untuk mengakses data yang ditunjuk oleh suatu variabel pointer. Operator ini hanya bekerja untuk typed pointer.
=, Untuk memeriksa apakah dua variabel pointer menunjuk alamat yang sama atau tidak
<>, Untuk memeriksa apakah dua variabel pointer menunjuk alamat yang berbeda
@, Untuk mengetahui alamat variabel tertentu. Operand dari operator ini adalah variabel apapun, sedangkan hasil dari operator ini adalah pointer. Peran operator ini sama persis dengan function Addr.
Tidak ada komentar:
Posting Komentar