• Pointer Dalam Turbo Pascal


      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. 
    Bentuk umum dari deklarasi tipe pointer:
     Untuk pointer bertipe:
     <nama_var> : ^<tipe_data>;
     Untuk pointer tidak bertipe:
     <nama_var> : pointer;
    Suatu pointer dapat menunjuk ke data bertipe elementerterstrukturpointer yang lain, atau tidak 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 (sampah).
                    Dalam Pascal, pointer dapat diisi dengan nilai yang berasal dari:
    1. NIL
    2. Fungsi Ptr
    3. Operator @
    4. Prosedur New dan GetMem

    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.
    Fungsi Ptr
          Sintaks:
                      Function Ptr(Seg, Ofs : word) : pointer;
          dengan Seg      : segmen memori.
                      Ofs       : offset memori.
    Fungsi Ptr mengembalikan pointer dari segmen dan offset yang dimasukkan. Operator @
          Sintaks:
                      <nama_var>:=@<variabel_yang_alamatnya_diambil>;
          Operator ini digunakan untuk mengambil alamat variabel yang akan ditunjuk.
    Prosedur New dan GetMem
          Sintaks:
                      New(var P : pointer);
             GetMem(var P : pointer, size : word);
          Dengan P        : pointer yang akan diisi.
                      Size      : 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 variabel 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 variabel-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.

    Mendeklarasikan Variabel Pointer
    Suatu variabel pointer dideklarasikan dengan bentuk sebagai berikut :
    tipe *nama_variabel
    dengan tipe dapat berupa sembarang tipe yang sudah dibahas pada bab-bab sebelumnya, maupun bab-bab berikutnya. Adapun nama_variabel adalah nama dari variabel pointer.
    Sebagai contoh :
    int *px; //contoh 1
    char *pch1, *pch2; //contoh 2
    Contoh pertama menyatakan bahwa px adalah variabel pointer yang menunjuk ke suatu data bertipe int, sedangkan contoh kedua masing pch1 dan pch2 adalah variabel pointer yang menunjuk ke data bertipe char.
    Bentuk umum deklarasi pointer :
    Type Pengenal = ^simpul ;
    Simpul = tipe data ;

    dengan pengenal : nama pengenal yang menyatakan tipe data pointer
    simpul : nama simpul
    tipe data : tipe data dari simpul
    Tanda ^ di depan simpul harus ditulis apa adanya karena itu menunjukkan bahwa pengenal bertipe pointer. Tipe data dari simpul dapat berupa tipe data sebarang, misalnya char, integer, atau real.
    Contoh :
    Type Str30 = string[30] ;
    Point = ^Data ;
    Data = record
    Nama_Peg : Str30 ;
    Alamat : Str30 ;
    Pekerjaan : Str30 ;
    End ;
    Var
    P1, P2 : Point ;
    A, B, C : Str30 ;

    Mengatur Pointer agar Menunjuk ke Variabel Lain
    Agar suatu pointer menunjuk ke variabel lain, mula-mula pointer harus diisi dengan alamat dari variabel yang akan ditunjuk. Untuk menyatakan alamat dari suatu variabel, operator & (operator alamat, bersifat unary) bisa dipergunakan, dengan menempatkannya di depan nama variabel. Sebagai contoh, bila x dideklarasikan sebagai variabel bertipe int, maka: &x . Berarti “alamat dari variabel x”. Adapun contoh pemberian alamat x ke suatu variabel pointer px (yang dideklarasikan sebagai pointer yang menunjuk ke data bertipe int) yaitu : px = &x;
    Pernyataan di atas berarti bahwa px diberi nilai berupa alamat dari variabel x. Setelah pernyataan tersebut dieksekusi barulah dapat dikatakan bahwa px menunjuk ke variabel x.

    Mengakses Isi Suatu Variabel Melalui Pointer
    Jika suatu variabel sudah ditunjuk oleh pointer, variabel yang ditunjuk oleh pointer tersebut dapat diakses melalui variabel itu sendiri (pengaksesan langsung) ataupun melalui pointer (pengaksesan tak langsung). Pengaksesan tak langsung dilakukan dengan menggunakan operator indirection (tak langsung) berupa simbol * (bersifat unary).
    Contoh penerapan operator * yaitu : *px
    Yang menyatakan “isi atau nilai variabel/data yang ditunjuk oleh pointer px” . Sebagai contoh jika y bertipe int, maka sesudah dua pernyataan berikut:
    px = &x;
    y = *px;
    y akan berisi nilai yang sama dengan nilai x. Kedua pernyataan di atas sebenarnya dapat digantikan dengan sebuah pernyataan berupa :
    y = x;
    Seandainya pada program di atas tidak terdapat pernyataan:
    px = &x;
    namun terdapat pernyataan
    y = *px;
    maka y tidaklah berisi nilai x, sebab px belum diatur agar menunjuk ke variabel x.
    Hal seperti ini harap diperhatikan. Kalau program melibatkan pointer, dan pointer belum diinisialisasi, ada kemungkinan akan terjadi masalah yang dinamakan “bug” yang bisa mengakibatkan komputer tidak dapat dikendalikan (hang). Selain itu tipe variabel pointer dan tipe data yang ditunjuk harus sejenis. Bila tidak sejenis maka akan terjadi hasil yang tidak diinginkan.
    Previous
    Next Post »

    Tata Cara Berkomentar :
    - Komentar harus sesuai topik, tidak menyimpang !
    - Jangan meletakkan link aktif pada komentar, karena itu spam !
    - Tolong beritahukan Saya jika ada link, gambar, dll yang rusak !
    Thanks You for visit.
    Out Of Topic Show Konversi KodeHide Konversi Kode Show EmoticonHide Emoticon

    Terima kasih sudah berkomentar