Last Updated:

Tipe Pointer

Grup KPPDI
Grup KPPDI

Di Delphi, hampir semua tipe data memiliki padanan bertipe pointer. Tipe-tipe pointer ini berguna pada penggunaan memori dalam skala besar secara dinamis. Misalnya pada pengaksesan file, linked-list.

Bila sebuah variabel bertipe integer dideklarasikan, maka compiler akan mengalokasikan memori sebesar 4 byte (32 bit) untuk variabel tersebut, terlepas dari apakah variabel tersebut digunakan atau tidak. Dengan pointer, memori hanya akan dialokasikan jika variabel bertipe pointer akan digunakan. Dengan demikian, kita dapat mengatur penggunaan memori secara fleksibel dan hemat. Bila belum perlu, memori tidak digunakan, sehingga dapat dialokasikan oleh variabel lain yang mungkin akan lebih dulu menggunakan memori.

Di bawah ini beberapa tipe pointer yang disediakan Delphi. Namun Anda dapat dengan bebas mendeklarasikan tipe pointer lainnya sesuai kebutuhan. Satu catatan mengenai penggunaan pointer, bila Anda mengalokasikan memori pada sebuah pointer, Anda bertanggungjawab untuk melepaskannya kembali. Bila tidak, memori tersebut tetap dicatat sebagai “sedang digunakan”, sehingga variabel bertipe pointer lainnya tidak mengalokasikan memori pada alamat yang ditunjuk oleh variabel bertipe pointer sebelumnya.

Sebenarnya pointer adalah berukuran 4 byte (32 bit), bertipe Dword. Semua tipe pointer lainnya adalah pointer. Hanyasannya, tipe pointer lainnya dideklarasikan secara khusus untuk memberitahu compiler ukuran satuan data pada alamat yang ditunjuk oleh pointer tersebut.

Berikut adalah tipe-tipe pointer yang telah disediakan Delphi. Selanjutnya, kita akan lihat tipe-tipe pointer yang user-defined dan contoh penggunaanya.


PAnsiChar
PAnsiChar adalah pointer yang menunjukkan alamat data bertipe AnsiChar. Harap diingat, meskipun AnsiChar berukuran 1 byte (8 bit), tetapi PAnsiChar berukuran 4 byte (32 bite), karena pada dasarnya, semua pointer berukuran 4 byte.

var
  p: PansiChar;
  a: AnsiChar;
begin
  ShowMessage('Ukuran AnsiChar: '+IntToStr(SizeOf(a)) +#13'Ukuran PansiChar: '+ IntToStr(SizeOf(p)));

Hasil kode di atas:
image 

PAnsiString
Menunjukkan alamat AnsiString. AnsiString sendiri adalah sejenis pointer, sehingga PAnsiString jarang dugunakan. Anda mungkin ingin membaca tentang AnsiString untuk melihatnya lebih jauh.

PChar
Mirip dengan PAnsiChar. Meskipun pada versi Delphi terbaru, Char telah diperlakukan sebagai PWideChar (2 byte), bukan lagi AnsiChar (1 byte), tetap saja PChar berukuran 4 byte. Karena bagaimanapun, PChar adalah pointer. Penggunakan PChar biasanya dalam operasi string yang dibatasi dengan zero character, seperti yang digunakan di Windows dan biasanya digunakan dalam C/C++.

Pada kode-kode Windows API yang menggunakan string sebagai parameter/kembalian fungsi, maka tipe data inilah yang sering dipakai. Tinggal menetukan apakah PAnsiChar apabila fungsi tersebut menggunakan standar ANSI ataukah PWideChar jika Unicode.

PCurrency
Pointer ke tipe data Currency.

PDateTime
Pointer ke tipe DateTime.

PExtended
Pointer ke tipe Extended.

Pointer to an Int64 value.

Pointer
Defines a general use Pointer to any memory based data.

PShortString
Pointer ke tipe data ShortString.

PString
Pointer ke tipe String

PVariant
Pointer ke tipe

PWideChar
Mirip dengan PChar dan PAnsiChar.

PWideString
Pointer ke tipe WideString.

Lebih jauh dengan pointer, kita diskusikan di sini.

Comments