Anda di halaman 1dari 9

Paper Variabel Pointer

Tugas Struktur Data

DISUSUN OLEH
1. Fitra Jelita
2. Aldi Nurzahpura
3. Hendi Susanto

4611414006
4611414028
4611414043

PROGRAM STUDI TEKNIK INFORMATIKA


JURUSAN ILMU KOMPUTER
FAKULTAS MATEMATIKA DAN ILMU PENGETAHUAN ALAM
UNIVERSITAS NEGERI SEMARANG
1

2015

A. Pengertian Variabel Pointer


Pointer merupakan

suatu tipe data dalam

Pascal yang berfungsi untuk

menunjuk dan menyimpan alamat memori. Dalam penulisan pointer biasa digambar
dengan panah, sedangkan bagian memori yang ditunjuk digambar dengan kotak, dan
isinya ditulis di dalam kotak.
Karena itu biasa dikatakan bahwa sebenarnya pointer bukan berisi data,
melainkan berisi alamat dari suatu data. Ilustrasi untuk pointer adalah seperti gambar
berikut :

Pembahasan :
R adalah pointer yang menunjuk record Dewi, V adalah pointer ke record Dita.
Pointer juga bersifat fleksibel, misalnya dua pointer dapat menunjuk pada record yang
sama, seperti T dan U yang menunjuk record Dedek, namun juga dapat tidak menunjuk
ke suatu record apapun (nil), seperti pointer S. Dari sifat pointer yang fleksibel, kita
juga harus berhati-hati dalam memindahkan arah pointer, jangan sampai ada record
yang hilang. Record Diah merupakan record yang hilang, tanpa ada pointer yang
menunjuk.

B. Deklarasi Variabel Pointer


2

Tipe pointer dideklarasikan pada bagian deklarasi type.


Bentuk umum dari deklarasi tipe pointer:
1. Untuk pointer bertipe:
<nama_var> : ^<tipe_data>;
Tipe data, misalnya char, integer atau real. Sebagai contoh :
Type Angka : ^integer;
2. Untuk pointer tidak bertipe:
<nama_var> : pointer;
Suatu pointer dapat menunjuk ke data bertipe elementer, terstruktur, pointer
yang lain, atau tidak bertipe. Jika suatu pointer tidak menunjuk kemana - mana,
pointer itu dinamakan dangling, sedangkan bagian memori yang tidak dapat diakses
karena tidak ada pointer yang menunjuk dinamakan garbage (sampah). Dalam Pascal,
pointer dapat diisi dengan nilai yang berasal dari :
1.

NIL

2.

FungsiPtr

3.

Operator @

4.

Prosedur New danGetMem

5.

Pointer yang lain

Reserved word NIL


NIL merupakan reserved word dalam Pascal, di mana pointer yang bernilai
NIL

dianggap tidak menunjuk alamat memori manapun. NIL biasa digambarkan

dengan lambang ground.


FungsiPtr
Sintaks:
Function Ptr(Seg, Ofs : word) : pointer;
Dengan Seg: segmen memori.
Ofs: offset memori.
3

Fungsi Ptr mengembalikan pointer dari segmendan offset yang dimasukkan.


Operator @
Sintaks:
<nama_var>:=@<variabel_yang_alamatnya_diambil>;
Operator ini digunakan untuk mengambil alamat variabel yang akan ditunjuk.
Prosedur New danGetMem
Sintaks:
New(varP : pointer);
GetMem(varP : pointer, size : word);
Dengan P
Size

: pointer yang akan diisi.


: ukuran yang dipesan.

Prosedur New digunakan untuk memesan memori untuk pointer bertipe,


sedangkan prosedur GetMem untuk pointer tidak bertipe. Kedua prosedur ini akan
membentuk suatu variable dinamik yang diletakkan dalam Heap. Heap adalah
memori - memori di komputer yang belum dialokasikan, yaitu memori yang tidak
digunakan oleh DOS, oleh program - program resident, oleh program Turbo Pascal,
internal stack yang digunakan oleh Turbo Pascal dan variable - variabel di data segmen.
Pointer yang belum digunakan sebaiknya diisi dengan NIL, dan untuk pointer
yang telah menunjuk sebuah alamat yang sudah dipesan memorinya, isinya dapat
dimanipulasi melalui pointer.
Contoh Deklarasi tipe data pointer:
programdeklarasi;
usescrt;
var p : ^integer;
nilai : integer;
beginclrscr;
nilai:=12;
p:=@nilai;
4

writeln(p^);
p^:=100;
writeln(p^);
writeln(nilai);
readln;
end.
Pembahasan :
Pada contoh program deklarasi ini, pertama-tama dideklarasikan variable p
sebagai pointer yang bertipe integer. Dibuat sebuah variable lagi yang diberi nama
nilai dan bertipe integer.
Variabel nilai diisi dengan nilai 12. Kemudian variabel p menunjuk alamat dari
variable nilai dengan operator @, sehingga variabel p berisi nilai 12, dan ditampilkan
outputnya di layar. Kemudian variabel p diberi nilai 100, dan secara otomatis variable
nilai juga bernilai 100 karena sudah ditunjuk oleh variabel p. Kemudian isi dari variabel
p yang baru dan variable nilai ditampilkan di layar.

C. Fungsi Pointer
1. Meningkatkan kinerja untuk operasi yang dilakukan secara berulang, karena
variabel pointer bersifat dinamis (dapat diubah ubah lokasi penyimpannya dalam
memory).
2. Pada variable biasa kita tidak perlu tahu alamat memory dari variable tersebut.
Untuk mengakses hanya perlu nama variable tersebut. Tapi untuk struktur data
dinamis (linked list, tree dsb) hal tersebut tidak bisa.
3. Penggunaan pointer yang tepat dapat mempercepat sebuah proses secara signifikan.
4. Pemindahan data yang besar dari sebuah variabel.

D. Operator Pointer
Operator Pointer ada dua, yaitu :
5

a. Operator &
Operator & merupakan operator alamat. Pada saat pendeklarasian variable, user
tidak diharuskan menentukan lokasi sesungguhnya pada memory, hal ini akan
dilakukan secara otomatis oleh kompiler dan operating sysem pada saat run-time. Jika
ingin mengetahui dimana suatu variable akan disimpan, dapat dilakukan dengan
memberikan tanda ampersand (&) didepan variable , yang berarti "address of". Contoh :
ted = &andy;
Penulisan

tersebut

berarti

akan

memberikan

variable ted alamat

dari

variable andy. Karena variabel andy diberi awalan karakter ampersand (&), maka yang
menjadi

pokok

disini

adalah

alamat

dalam

memory, bukan

isi

variable.

Misalkan andy diletakkan pada alamat 1776kemudian dituliskan instruksi sbb :


andy = 25;
fred = andy;
ted = &andy;
Operator & bersifat unary (hanya memerlukan satu operand saja).
Operator & menghasilkan alamat dari operandnya.

b. Operator *
Operator * merupakan operator reference. Dengan menggunakan pointer, kita
dapat mengakses nilai yang tersimpan secara langsung dengan memberikan awalan
operatorasterisk (*) pada identifier pointer, yang berarti "value pointed by". Contoh :
beth = *ted;
(dapat dikatakan:"beth sama dengan nilai yang ditunjuk oleh ted") beth = 25, karena ted
dialamat 1776, dan nilai yang berada pada alamat 1776 adalah 25.
Ekspresi dibawah ini semuanya benar, perhatikan :
andy = 25;
&andy = 1776;
ted = 1776;
*ted = 25;
Ekspresi

pertama

merupakan assignation bahwa andy

25;.

Kedua,

menggunakan operator alamat (address/derefence operator (&)), sehingga akan


mengembalikan

alamat

dari

variabel

andy.

Ketiga

bernilai

benar

karena assignation untuk ted adalah ted = &andy;. Keempat menggunakan reference
6

operator (*) yang berarti nilai yang ada pada alamat yang ditunjuk olehted, yaitu 25.
Maka ekspresi dibawah ini pun akan bernilai benar :
*ted = andy;

Operator * bersifat unary (hanya memerlukan satu operand saja).


Operator * menghasilkan nilai yang berada pada sebuah alamat.

E. Operasi Pointer
Operasi pointer ada 3 yaitu :
A.

OperasiPenugasan
Nilai dari suatu variabel pointer dapat disalin ke variabel pointer yang lain.
Contoh:
y = 65;
x1 = &y;
X2 = x1;

B.

Operasi Aritmatika
Suatu variabel pointer hanya dapat dilakukan operasi aritmatika dengan nilai
integer saja.
Operasi penambahan dengan suatu nilai menunjukkan lokasi data berikutnya
(index selanjutnya) dalam memori.
Hanya 4 operator aritmatika dapat digunakan pada pointer, yaitu ++, ==, +, dan
-.
Operasi yang biasa dilakukan adalah operasi penambahan dan pengurangan.
Contoh:
{
inti[4], *i_Ptr;
int x;
i_Ptr = i;
for (x = 0; x<4; x++)
cout<<i_Ptr+x<<\n;
return 0;
7

}
Apabila program di atas di jalankan, maka akan muncul:
0xeffffd9c
0xeffffda0
0xeffffda4
0xeffffda8
C.

Operasi Logika (Operasi Perbandingan)


Pointer dapat dibandingkan dengan menggunakan operator hubungan, seperti !=,
==, <, dan>.
Contoh:
{
intnum[4];
int *start, *end;
start = num;
end = &num[3];
while (start != end)
}

F. Manipulasi Memori
Manipulasi memori lewat Pointer bertipe
useswincrt;
varp,q,r,s:^string;
nilai:string;
begin clrscr;
nilai:='ini string nilai!!!';
p:=@nilai;
new(q);
q^:='ini isi pointer q!!!';
r:=q;
s^:=q^;
8

writeln('alamat pointer p=',seg(p^):4,':',ofs(p^):4,';


isi pointer p=',p^);
writeln('alamat pointer q=',seg(q^):4,':',ofs(q^):4,';
isi pointer q=',q^);
writeln('alamat pointer r=',seg(r^):4,':',ofs(r^):4,';
isi pointer r=',r^);
writeln('alamat pointer s=',seg(s^):4,':',ofs(s^):4,';
isi pointer s=',s^);
readln;
end.
Output program:
Alamat pointer p= 4446:

98; isi pointer p= ini string nilai!!!

Alamat pointer q= 5559:

0; isi pointer q= ini isi pointer q!!!

Alamat pointer r= 5559:

0; isi pointer r= ini isi pointer q!!!

Alamat pointer s=

0; isi pointer s= ini isi pointer q!!!

0:

Anda mungkin juga menyukai