Lebih Jauh Dengan Pointer [ 2 ]

Oke. Pembahasan kita terakhir adalah dereferensi pointer untuk mengambil nilai yang ditunjuknya.

Pertanyaan, bila kita bebas melakukan casting terhadap variabel bertipe pointer untuk mengambil nilainya, dapatkah kita membuat saja tipe variabel baru yang sesuai dengan kebutuhan kita? Agar tidak usah ada casting lagi tiap kita melakukan dereferensi terhadap pointer?

Jawabannya, tentu saja.

Kita dapat membuat tipe variabel baru bertipe pointer dengan ukuran yang bebas. Contoh, kita akan membuat sebuah tipe data, berjenis pointer, dan data yang ditunjuknya seukuran Dword.

type

PDword = ^Dword;

Nah, kita telah memiliki tipe data baru. Sebuah tipe data berjenis pointer, data yang ditunjuk seukuran Dword, bernama PDword. Kita memberi nama dengan prefiks P agar kita mudah mengingat bahwa tipe data tersebut berjenis pointer. Tanda ^ di depan tipe data dasar (Dword) adalah penunjuk bahwa kita sedang mendeklarasikan sejenis pointer sebagai tipe data baru.

Sebuah contoh akan menjelaskan lebih jauh:

procedure TForm1.Button1Click(Sender: TObject);
type
  PDword = ^Dword;
var
  PointerDword: PDword;
  DwordBiasa1,
  DwordBiasa2:  Dword;
begin
  DwordBiasa1 := 16762;
  PointerDword := @DwordBiasa1;
  DwordBiasa2 := pointerDword^;
  ShowMessage(‘Nilai dereferensi: ‘+ IntToStr(DwordBiasa2));
  pointerDword^ := 4;
  ShowMessage(‘Nilai dereferensi: ‘+ IntToStr(DwordBiasa1));
end;

Lihat. Nilai DwordBiasa1 adalah 16762. Kita deklarasikan tipe data baru dengan nama PDword, sebagai tipe berjenis pointer, ukuran data yang ditunjuknya sebesar ukuran data Dword. Kita juga punya sebuah variabel PointerDword dengan tipe PDword tadi. variabel PointerDword ini kita tugaskan untuk menjukkan alamat variabel DwordBiasa1 di memori. Kemudian kita dereferensikan lagi ke variabel DwordBiasa2. Ternyata, tanpa perlu casting tipe data, kita sudah dapat mengambil nilai 16762 tadi.
image

Bagaimana dengan dua baris terakhir? Ingat, pointer, termasuk PDword tadi, hanya menunjukkan alamat sebuah data/variabel di memori. Bukan menunjukkan nilainya. Jika kita melakukan dereferensi dengan x:=p^, maka nilai pada memori yang ditunjuk oleh p di memori akan dimasukkan ke variabel x. Sebaliknya, bilai kita melakukan penugasan p^:=x, maka nilai di memori yang ditunjuk oleh p akan diisi dengan nilai x.

DwordBiasa1 := 16762;
PointerDword := @DwordBiasa1;
//……………………………
pointerDword^ := 4;

Pada kode di atas, DwordBiasa1 awalnya bernilai 16762. Kemudian kita mencatat alamat data DwordBiasa1 ke variabel PointerDword. Baris terakhir mengubah nilai di alamat tersebut (yang ditunjuk oleh PointerDword) menjadi 4. Ini berakibat variabel DwordBiasa1, yang berada di alamat tersebut, menjadi bernilai 4, bukan lagi 16762. Percaya?
image

Oke. Lanjut.🙂

Kemudian perhatikan deklarasi tipe-tipe data yang tersedia di Delphi. Kebanyakan mereka dideklarasikan menggunakan cara kita:

PTipe = ^Tipe;

Dengan pembahasan ini, saya berharap kita sudah punya sebuah pengetahuan baru, bahwasannya pointer adalah sesuatu yang sangat bagus dalam memfasilitasi kita dalam menulis program. Meskipun terlihat begitu rumit dan bertele-tele, kita harus bersyukur bahwa pointer ada di dunia yang kita tinggali, dunia programming🙂

Manfaat pointer tentu saja belum terasa sampai di sini. Kita masih akan melanjutkan dengan tipe-tipe data dasar lainnya, sebelum melanjutkan pembahasan sampai ke pemanfaatan pointer dan contoh-contoh implementasinya dalam kode.

Salam, Joko Rivai.

2 thoughts on “Lebih Jauh Dengan Pointer [ 2 ]

  1. Hlo Bung Joko….
    Saya baru belajar delphi 7 dan bikin laporan dengan rave report bawaan delphi7. Pertanyaan saya dan mohon pencerahan…. saya buat laporan yang diambil dari tipe data text, bagaimana cara untuk setting spasi antar baris misalnya 1.5 spasi ato 2 spasi. Nantinya saya rencana mau konvert ke word. bagaimana caranya.. sementara ini saya baru bisa konvert ke tipe rtf. Mohon pencerahan dari Bung Joko. Terimakasih banyak. Oiya saya belum tau bgm mau posting, jadinya tulis disini…. Thanks sebelumnya

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s