Jenis atau Tipe data Pointer


TIPE DATA POINTER | Pointer adalah tipe data dalam Pascal yang berguna untuk menyimpan alamat memori. Untuk mempermudah penjelasan nanti, kita menggambar pointer dengan panah (==>). Suatu pointer, biasanya menunjuk ke bagian memori yang sesuai dengan tipe datanya. Untuk bagian memori ini, kita gambar dengan kotak (□) dan isinya ditulis di dalam kotak.



Pointer ada 2 macam, yaitu:



1. Pointer bertipe

Deklarasi: : ^tipe_data;



2. Pointer tak bertipe

Deklarasi: : pointer;



Untuk lebih jelasnya, perhatikan contoh berikut:




Var
   p : ^integer;
   nilai : integer;
begin
   nilai := 12;
   p := @nilai;
end.





Suatu pointer dapat menunjuk ke data bertipe elementer, terstruktur, pointer yang lain, atau pointer tak bertipe. Jika suatu pointer tidak menunjuk ke mana – mana, pointer itu dinamakan dangling sedangkan bagian memori yang tidak dapat diakses karena tidak ada pointer yang menunjuk dinamakan garbage.



Dalam Pascal, pointer dapat diisi dengan nilai yang berasal dari:


  1. NIL

  2. Fungsi ptr

  3. Operator @

  4. Prosedur New dan GetMem

  5. Pointer yang lain



Reserved Word NIL



NIL merupakan reserved word yang disediakan oleh Pascal. Jika suatu pointer bernilai NIL, pointer tersebut dianggap tidak menunjuk alamat memori manapun. Kita harus berhati – hati dalam mengisi pointer dengan NIL, karena dapat menciptakan garbage. BIasanya, NIL dilambangkan dengan tanda ground ( Garis Lurus Kemudian Panah Kebawah ).



Fungsi Ptr



Function Ptr(Seg, Ofs: word): pointer;

Seg adalah segment memori

Ofs adalah offset memori



Fungsi Ptr mengembalikan pointer dari segment dan offset yang dimasukkan. Fungsi ini jarang digunakan karena programmer jarang menunjuk memori secara langsung dengan pointer.



Operator @

Berguna untuk mengambil alamat variable yang akan ditunjuk (lihat kembali contoh program sebelumnya)



Prosedur New dan GetMem



Procedure New(var p: pointer)’

Procedure GetMem(var p: pointer, size: word);



P adalah pointer yang akan diisi

Size adalah ukuran yang dipesan



Untuk memesan memori pointer bertipe digunakan prosedur New, sedangkan untuk memesan memori pointer tak bertipe digunakan prosedur GetMem. Memori yang ditunjuk oleh pointer ini bukan variabel yang ada di program sehingga untuk memanipulasi isi memori dapat digunakan cara yang akan dibahas selanjutnya.



Manipulasi Memori Lewat Pointer Bertipe



Sebelum menunjuk alamat yang pasti atau belum mendapatkan alokasi memori, pointer sebaiknya diisi dahulu dengan NIL. Adapun jika pointer yang telah menunjuk sebuah alamat memori yang sudah dipesan memorinya, maka kita dapat memanupulasi isi memori tersebut melalui pointer.



Untuk mengacu isi memori yang ditunjuk oleh suatu pointer, digunakan sintaks ^



Perhatikan contoh di bawah ini:



var
  p, q, r, s : ^String;
  nilai : String; 


begin
  nilai := ‘ini adalah string nilai’;
  p := @nilai;
  New(q);
  New(s);
  q^ := ‘ini isi pointer q’;
  r := q; {r menunjuk ke yang ditunjuk q}
  s^ := q^;
  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.






Memanipulasi Memori Lewat Pointer Tak Bertipe



Pointer tak bertipe lebih susah ditangani karena tidak dapat diakses secara langsung. Salah satu cara mengskases isi pointer tak bertipe adalah dengan variabel Bantu pointer bertipe. Perhatikan contoh berikut:



var
  p : Pointer;
  q : ^Byte;
  r : array [0..19] of Byte;
  i : Byte;
begin
  GetMem(p, 20);
  q := p;
  for i := 0 to 19 do
  begin
     r[i] := 19 – i;
     q^ := 19 – i; 


     inc(q);
  end;
  q := p;
  for i := 0 to 19 do
  begin
    write(‘r[ ’, i ,’ ] = ’, r[i], ‘; ’);
    writeln(‘p^ ke-’, i ,’ = ’, q^);
    inc(q);
  end;
  readln;
end.






Yang dilakukan program di atas:



1. Memesan memori sebesar 20 Byte untuk p

2. Menunjuk alamat yang dituntuk pointer p dengan pointer q

3. mengisi variabel r[i] dan q^ dengan 19 – i

4. Menaikkan isi q sehingga q menunjuk ke alamat berikutnya





Type or data type Pointer

POINTER DATA TYPE | Pointer data type in Pascal is useful for storing a memory address. To simplify the explanation later, we draw the pointer with the arrow (==>). A pointer, usually pointing to the memory according to its data type. For the memory part, we are drawing a box (□) and the contents written on the box.
Pointer there are 2 types, namely:
1. Pointer-type
Declaration :: ^ tipe_data;
2. Pointer is not of type
Declaration :: pointer;
For more details, consider the following example:

Var
   
p: ^ integer;
   
value: integer;begin
   
value: = 12;
   
p: = @ value;end.
A pointer can point to an elementary data types, structured, pointer, or pointer type no. If
the pointer does not point to where - where, it is called dangling
pointers while the memory can not be accessed because there is no
pointer called garbage.
In Pascal, a pointer can be filled with the value derived from:

    
NIL
    
Function ptr
    
Operator @
    
New Procedures and GetMem
    
Another Pointer

Reserved Word NIL
NIL is a reserved word provided by Pascal. If a pointer value NIL, pointer has been found not appoint any memory address. We should be - careful in filling the NIL pointer, because it can create garbage. Typically, denoted with an asterisk NIL ground (Straight Line Move Down Arrows Later).
Function Ptr
Function Ptr (Seg, OFS: word): pointer;
Seg is a memory segment
Ofs is offset memory
Ptr function returns the pointer of the segment and offset are included. This function is rarely used because programmers rarely refer directly to the pointer memory.
Operator @
Useful for taking a variable that will be designated address (see previous sample program)
New Procedures and GetMem
New Procedure (var p: pointer) '
Procedure GetMem (var p: pointer, size: word);
P is a pointer which will be filled
Size is the size of the ordered
To order pointer memory type used New procedure, while for the memory book is not of type pointer used GetMem procedure. Memory
pointed to by the pointer is not a variable in the program so as to
manipulate the contents of memory can be used in ways that will be
discussed later.
Manipulation of type Pointer Through Memory
Before appointing a definite address or do not get the memory allocation, pointer should be filled first by NIL. As
if the pointer has pointed to a memory address that has been ordered
memory, then we can memanupulasi memory contents via the pointer.
To refer to the contents of memory pointed to by a pointer, use the syntax ^
Consider the example below:
var
  
p, q, r, s: String ^;
  
value: String;
begin
  
value: = 'This is a string value';
  
p: = @ value;
  
New (q);
  
New (s);
  
q ^: = 'This content pointer q';
  
r: = q; {r pointing to a designated q}
  
s ^: = q ^;
  
writeln ('address pointer p =', seg (p ^): 4, ':', ofs (p ^): 4, 'the contents of the pointer p =', p ^);
  
writeln ('address pointer q =', seg (q ^): 4, ':', ofs (q ^): 4, 'content pointers q =' q ^);
  
writeln ('address pointer r =', seg (r ^): 4, ':', ofs (r ^): 4, 'content pointers r =', r ^);
  
writeln ('address pointer s =' seg (s ^): 4, ':', ofs (s ^): 4, 'the contents of the pointer s =', s ^);
  
readln;end.
Manipulating Memory Through Pointers not type
Pointer type not handled more difficult because it can not be accessed directly. One way mengskases content type is not a pointer to a variable of type pointer Bantu. Consider the following examples:
var
  
p: Pointer;
  
q: ^ Byte;
  
r: array [0 .. 19] of Byte;
  
i: Byte;begin
  
GetMem (p, 20);
  
q: = p;
  
for i: = 0 to 19 do
  
begin
     
r [i]: = 19 - i;
     
q ^: = 19 - i;

     
inc (q);
  
end;
  
q: = p;
  
for i: = 0 to 19 do
  
begin
    
write ('r [', i, '] =' r [i], ';');
    
writeln ('p ^ to-', i, '=', q ^);
    
inc (q);
  
end;
  
readln;end.
That is done in the program:
1. Booked by 20 Byte memory for p
2. Pointing dituntuk address pointer pointer p with q
3. fill variable r [i] and q ^ to 19 - i
4. Q Raise the contents so that q points to the next address

Subscribe to receive free email updates:

0 Response to "Jenis atau Tipe data Pointer"

Post a Comment