Setiap variabel disimpan dalam memori komputer dan memiliki alamat
sesuai letaknya dalam memori. Variabel biasa digunakan untuk menyimpan
suatu nilai berdasarkan tipe datanya, sedangkan variabel dengan tipe
data pointer digunakan untuk menyimpan alamat variabel lain. Tipe data
pointer dideklarasikan dengan tanda caret (^) sebelum nama tipe data.
Contohnya :
Var
A = ^real;
B = ^char;
C = ^array[1..1o] of integer;
date-ptr = ^date;
Tanggal = record
Tahun: 1..31;
Bulan: 1..12;
Tahun: 1800..3000;
End;
Tipe data pointer dalam pascal hanya dapat menyimpan alamat variabel dengan satu jenis tipe data. Misalnya "variabel A" pada contoh di atas hanya bisa menyimpan tipe data real. Perhatikan contoh berikut ini :
Selain harus sesuai tipe datanya, data yang akan
disimpan alamatnya didahului dengan tanda "@". Jika kalian memperhatikan
contoh di atas, kalian bisa melihat bahwa variabel Aptr digunakan untuk
menyimpan alamat variabel A yang tipe datanya adalah real. Mari kita
lanjutkan dengan contoh kode programnya!
Jika deklarasi variabel pointer yang menggunakan tanda caret sebelum nama tipe data, untuk menulis nilai dari variabel yang ditunjuk oleh variabel pointer kita menggunakan tanda caret (^) setelah nama variabel. Sekarang coba ubah nilai variabel A dan jalankan kembali program yang dihasilkan!
Nilai A maupun pointer Apt tentu saja r yang menunjuk A seharusnya akan berubah.
Pointer tidak menyimpan nilai, tapi menyimpan alamat dari "tempat penyimpanan nilai". Jika kalian ingin menyimpan nilai pada alamat yang sudah ditunjuk dengan pointer, kalian bisa menggabungkan tanda caret(^) dengan tanda sama dengan(=), sehingga tandanya jadi "^=". Isi dari memori ditampilkan dengan menambahkan tanda caret (^) setelah nama variabel. Tanpa tanda caret setelah variabel pointer, kode program tidak akan bisa dicompile karena error.
Var
A = ^real;
B = ^char;
C = ^array[1..1o] of integer;
date-ptr = ^date;
Tanggal = record
Tahun: 1..31;
Bulan: 1..12;
Tahun: 1800..3000;
End;
Tipe data pointer dalam pascal hanya dapat menyimpan alamat variabel dengan satu jenis tipe data. Misalnya "variabel A" pada contoh di atas hanya bisa menyimpan tipe data real. Perhatikan contoh berikut ini :
Program pointer;
uses crt;
Var
Aptr : ^real;
Bptr : ^char;
Cptr : ^ Boolean;
A: real;
B: char;
C: Boolean;
Begin
clrscr;
Aptr := @A;
Bptr := @B;
Cptr := @C;
End.
Program pointer;
uses crt;
Var
Aptr : ^Integer;
A: integer;
Begin
clrscr;
A:=1;
Aptr := @A;
writeln('A:', A);
writeln('Aptr:', Aptr^);
readln;
End.
Jika deklarasi variabel pointer yang menggunakan tanda caret sebelum nama tipe data, untuk menulis nilai dari variabel yang ditunjuk oleh variabel pointer kita menggunakan tanda caret (^) setelah nama variabel. Sekarang coba ubah nilai variabel A dan jalankan kembali program yang dihasilkan!
Nilai A maupun pointer Apt tentu saja r yang menunjuk A seharusnya akan berubah.
Program pointer;
uses crt;
Var
Aptr : ^Integer;
A : integer;
Begin
clrscr;
A := 2;
Aptr := @A;
writeln('A :', A);
writeln('Aptr :', Aptr^);
readln;
End.
Silakan dicoba dan bandingkan hasilnya dengan kode program sebelumnya.
Alokasi Memori
Seperti dalam bahasa C / C++, pascal juga menyediakan alokasi memori untuk pointer. Alokasi memori untuk pointer dalam pascal bisa digunakan menggunakan prosedur getmem dan freemem. Setelah menggunakan malloc, kalian bisa membebaskan memorinya dengan free.
Alokasi Memori
Seperti dalam bahasa C / C++, pascal juga menyediakan alokasi memori untuk pointer. Alokasi memori untuk pointer dalam pascal bisa digunakan menggunakan prosedur getmem dan freemem. Setelah menggunakan malloc, kalian bisa membebaskan memorinya dengan free.
program alokasi_memori;
uses crt;
Var
Aptr: ^Integer;
Begin
clrscr;
Aptr := getmem(sizeof(Aptr));
Aptr^:=2;
writeln('Aptr : ', Aptr^);
freemem(Aptr);
readln;
End.