Tutorial Belajar Pascal Part 27: Pengertian dan Cara Penggunaan Tipe Data Pointer Pascal

Kali ini saya akan membahas salah satu tipe data khusus yang (bagi kebanyakan programmer pemula) cukup rumit, yakni tipe data pointer.

Saya akan membahas pengertian dan cara penggunaan tipe data pointer di dalam bahasa pemrograman pascal.


Pengertian Tipe Data Pointer Pascal

Tipe data pointer adalah tipe data yang berisi alamat memory dari sebuah variabel. Untuk dapat memahami ini, saya akan membahas terlebih dahulu bagaimana pascal (dan bahasa pemrograman lain) menyimpan nilai dari sebuah variabel.

Ketika kita mendeklarasikan sebuah variabel (misalkan variabel 'angka'), pascal akan menyiapkan sebuah tempat di memory komputer. Tempat ini memiliki alamat, yang berfungsi untuk menandai lokasi variabel tersebut.

Untuk dapat memahami ini, bayangkan memory komputer sebagai sebuah lemari besar. Variabel disimpan di dalam setiap laci lemari. Setiap laci tentunya memiliki nomor agar mudah diakses. Nomor laci inilah yang akan disimpan sebagai pointer.

Sebagai contoh, variabel 'angka' bisa ditempatkan di alamat 10023 pada memory komputer. Variabel lain, misalnya 'huruf', akan disimpan di alamat 19920, variabel 'i' bisa disimpan di alamat 10033, dst. Alamat memory inilah yang disimpan ke dalam tipe data pointer.

Pembahasan tentang pointer dan alamat memory ini sangat luas jika dibahas. Di jurusan ilmu komputer / teknik informatika, terdapat mata kuliah 'struktur data' yang secara khusus akan membahas cara penyimpanan data di dalam memory komputer, yang semuanya akan menggunakan pointer.


Cara Penggunaan Tipe Data Pointer Pascal

Sekarang, kita akan masuk ke praktek cara penggunaan tipe data pointer di dalam pascal.

Untuk dapat membuat pointer, di dalam pascal kita harus menyesuaikannya dengan variabel yang ingin diakses. Maksudnya seperti ini, jika saya mendeklarasikan sebuah variabel 'angka':

var
  angka: integer;

Disini variabel 'angka' disiapkan untuk menampung tipe data integer.

Untuk bisa menampung alamat memory dari variabel 'angka' ini, saya harus membuat pointer yang juga di-set untuk menampung tipe data pointer integer. Berikut cara penulisannya:

var
  pointer_angka : ^integer;

Perhatikan tanda 'topi' atau 'caret'. Inilah cara pendeklarasian tipe data pointer di dalam pascal. ^integer berarti saya mempersiapkan sebuah pointer untuk variabel integer.

Jika kita butuh pointer ke tipe data lain, penulisannya juga akan berbeda. Misalnya, untuk membuat pointer ke alamat variabel yang bertipe data char, bisa ditulis sebagai berikut:

var
  pointer_kata : ^char;

Baiklah, setelah deklarasi tipe data pointer selesai, lalu bagaimana cara penggunaannya?

Di dalam pascal, kita butuh karakter '@' yang berfungsi untuk menampilkan alamat memory sebuah variabel.

Perhatikan potongan kode program pascal berikut ini:

var
  angka: integer;
  pointer_angka : ^integer;
begin
  pointer_angka:= @angka;

Baris terakhir: pointer_angka:= @angka adalah kode yang 'mengaitkan' kedua variabel ini. Sekarang, variabel pointer_angka akan berisi alamat memory dari variabel 'angka'. Silahkan anda pahami sebentar maksud kalimat ini.

Apabila di tampilkan, variabel pointer_angka akan berisi: 40960. Inilah alamat memory yang dipergunakan pascal untuk menyimpan variabel 'angka'. Alamat ini sepenuhnya ditentukan oleh pascal, terserah akan menyimpan di alamat memory mana.

Baiklah, jika sekarang variabel pointer_angka sudah berisi '40960', lalu bagaimana cara menampilkan isi dari alamat memory ini?

Jika saya menggunakan perintah:

writeln(pointer_angka);

Yang akan ditampilkan adalah alamat memory, bukan isi dari alamat memory tersebut. Untuk hal ini kita kembali harus menggunakan karakter topi '^' tetapi letaknya di akhir variabel, seperti berikut:

writeln(pointer_angka^);

Kali ini, perintah diatas akan menampilkan isi dari alamat memory yang ada di alamat '40960'.

Huff… anda masih bersama saya? Sebelum terlanjur ngantuk, mari kita langsung masuk ke contoh kode program pascal:

program tipe_pointer;
uses crt;
var
  angka: integer;
  pointer_angka : ^integer;
begin
  clrscr;
  angka:= 99;
  writeln('Variabel angka berisi: ',angka);
 
  pointer_angka:= @angka;
  writeln('Variabel pointer merujuk ke nilai: ',pointer_angka^);
 
  angka:=74;
  writeln('Variabel pointer merujuk ke nilai: ',pointer_angka^);
 
  readln;
end.

Cara penggunaan tipe data pointer pascal

Setelah penjelasan panjang sebelumnya, dapatkah anda memahami maksud kode program ini?

Dalam kode program tersebut, saya membuat 2 buah variabel: angka dan pointer_angka. Variabel pertama bertipe integer, sedangkan variabel kedua bertipe pointer integer. Selanjutnya, saya memberikan nilai 99 kedalam variabel angka.

Dapatkah anda menebak apa fungsi dari kode program berikut?

  pointer_angka:= @angka;

Yup, kode diatas akan membuat variabel pointer_angka berisi alamat memory dari variabel angka.

Jika saya menulis kode:

writeln(pointer_angka^)

Hasilnya adalah 99. Sekali lagi, dapatkah anda memahami dari mana angka 99 ini berasal?

Perintah diatas berarti saya memerintahkan pascal untuk menampilkan isi dari variabel yang berada di alamat memory pointer_angka (perhatikan penambahan karakter 'topi').

Sampai disini, kedua variabel telah saling terhubung. Untuk memastikannya, saya mengubah nilai variabel angka menjadi 74. Dan, seperti yang bisa ditebak, hasil dari perintah writeln(pointer_angka^), juga akan ikut berubah.

Jika pada contoh diatas masih membuat anda bingung, mari kita masuk ke contoh kedua:

program tipe_pointer;
uses crt;
var
  nama: string[20] ;
  pointer : ^string;
begin
  clrscr;
  nama:= 'Unyil';
  writeln('Variabel nama berisi: ',nama);
 
  pointer:= @nama;
  writeln('Variabel pointer merujuk ke nilai: ',pointer^);
 
  nama:= 'Alex';
  writeln('Variabel pointer merujuk ke nilai: ',pointer^);
 
  pointer^:= 'Joni';
  writeln('Variabel nama berisi: ',nama);
 
  readln;
end.

Cara penulisan tipe data pointer dalam pascal

Contoh diatas mirip dengan contoh sebelumnya, tapi kali ini saya menggunakan tipe data string. Perhatikan bahwa ketika saya mengubah isi dari variabel 'nama', nilai dari variabel pointer juga akan mengikuti. Dengan kata lain, variabel nama dan variabel pointer merujuk kepada nilai yang sama di alamat memory komputer.


Cara Menampilkan Alamat Memory dari Pointer

Untuk menampilkan alamat memory yang tersimpan di dalam pointer, kita harus menggunakan perintah khusus. Jika anda langsung menggunakan perintah:

writeln('pointer_angka');

Pascal akan mengeluarkan error.

Untuk dapat menampilkan alamat memory ini, kita harus mengubahnya ke dalam tipe data word (termasuk kedalam kelompok tipe data integer), dan menggunakan fungsi addr().

Berikut contohnya:

program tipe_pointer;
uses crt;
var
  angka: integer;
  pointer : ^integer;
  i : ^word;
begin
  clrscr;
  angka:= 99;
  writeln('Variabel angka berisi: ',angka);
 
  pointer:= @angka;
  writeln('Variabel pointer merujuk ke nilai: ',pointer^);
 
  i:= addr(pointer);
  writeln('Alamat memory yang digunakan adalah: ',i^);
 
  readln;
end.

cara menampilkan alamat pointer pascal

Dalam program diatas, saya menyiapkan sebuah variabel i dengan tipe data word. Untuk menampilkan alamat memory dari tipe data pointer, saya harus menggunakan perintah:

i:= addr(pointer);

Dan untuk menampilkannya juga diakses dengan tanda 'i^'.


Tipe data pointer yang dibahas disini memang cukup rumit, terutama untuk pemula. Tapi saya sangat sarankan agar anda bisa memahami konsep pointer ini. Karena di berbagai bahasa pemrograman lain, konsep pointer juga sering dibahas.


eBook Pascal Uncover Duniailkom
Apabila anda serius ingin mempelajari Pascal dan butuh materi Pascal yang jauh lebih lengkap, Duniailkom telah menerbitkan eBook Pascal Uncover yang membahas bahasa pemrograman Pascal dari dasar hingga procedure, function dan contoh kasus. Penjelasan lebih lanjut bisa ke eBook Pascal Uncover Duniailkom.

10 Comments

  1. Tikopipi
    03 Oct 16
    • Andre
      03 Oct 16
    • Ado Nababan
      23 Nov 17
  2. Tikopipi
    04 Oct 16
    • Andre
      04 Oct 16
  3. Tikopipi
    04 Oct 16
    • Andre
      04 Oct 16
  4. ROBBY HERMANDO
    12 Jul 17
    • Andre
      20 Aug 17

Add Comment