Makalah Pointer

download Makalah Pointer

of 10

Transcript of Makalah Pointer

1. POINTER DALAM PASCAL Variabel bertipe pointer adalah variabel yang nilainya merupakan alamat memori, yaitu alamat memori dari sebuah nilai dengan jenis/tipe data tertentu. Di bawah ini disajikan contoh pendeklarasian beberapa variabel bertipe pointer: var alamatNilaiInteger:^integer; var alamatNilaiReal:^real; var alamatNilaiString:^string; type TString20=string[20]; var alamatString20:^TString20; type TArrayInt=array[1..10] of integer; var alamatArrayInt:^TArrayInt; type TDataMhs=record NIM:array[1..10] of '0'..'9'; Nama:string[40]; IPK:real; end; var alamatDataMhs:^TDataMhs; Dalam contoh di atas, alamatNilaiInteger, alamatNilaiReal, alamatNilaiString, alamatTString20, alamatArrayInt dan alamatDataMhs, merupakan variabel bertipe pointer, karena dideklarasikan menggunakan tanda ^ (caret, tanda sisipan). Dengan demikian, bisa disimpulkan bahwa untuk mendeklarasikan variabel bertipe pointer, bentuk umumnya adalah: var namaVariabelPointer:^tipeDataNilaiYangDitunjukPointer

1

Terdapat 4 cara untuk mengisi nilai variabel pointer: 1. Menggunakan operator @ (address-of ). 2. Menggunakan variabel pointer yang lain. 3. Menggunakan prosedur new. 4. Menggunakan keyword NIL. Sedangkan untuk mengambil atau mengganti isi memori yang ditunjuk oleh sebuah variabel pointer, bentuknya adalah namaVariabelPointer^ (nama variabel pointer diikuti dengan tanda sisipan).

CONTOH 1 Perhatikan contoh program di bawah ini: program contoh_1; var a,b:integer; alamatXXX:^integer; begin a:=14; b:=5; alamatXXX:=@a; {alamatXXX diisi dg alamat memori yang ditempati variabel a} writeln(alamatXXX^); {output:14} {alamatXXX^ berarti "isi memori yang ditunjuk alamatXXX"} alamatXXX:=@b; {alamatXXX diisi dg alamat memori yang ditempati variabel b} writeln(alamatXXX^); {output:5} {alamatXXX^ berarti "isi memori yang ditunjuk alamatXXX"} end. CONTOH 2 Perhatikan contoh program di bawah ini: program contoh_2;

2

var a:integer; alamatXXX:^integer; begin a:=14; alamatXXX:=@a; {alamatXXX diisi dg alamat memori yang ditempati variabel a} writeln(alamatXXX^); {output:14} {alamatXXX^ berarti "isi memori yang ditunjuk alamatXXX"} a:=20; writeln(alamatXXX^); {output:20} {alamatXXX menunjuk memori yang digunakan untuk menyimpan...} {...nilai variabel a. Karena nilai a diganti menjadi 20...} {...maka isi memori yang ditunjuk alamatXXX kini menjadi 20} end. CONTOH 3 Perhatikan contoh program di bawah ini: program contoh_3; var a:integer; alamat1, alamat2:^integer; begin a:=14; alamat1:=@a; {alamat1 berisi alamat memori yang ditempati variabel a} alamat2:=alamat1; {alamat2 diisi dengan alamat memori yang ditunjuk alamat1...} {...yang berarti bahwa alamat2 juga menunjuk memori yang...} {...ditempati variabel a.} writeln(alamat2^); {output:14} alamat2^:=5; {Alamat memori yang ditunjuk alamat2 diisi dengan 5} writeln(alamat1^); {output:5} {Karena alamat1 menunjuk alamat memori yang sama dengan...} {...alamat2, maka alamat1^ juga bernilai 5} writeln(a); {output:5} {Karena alamat1 dan alamat2, keduanya menunjuk alamat...}

3

{...memori yang ditempati variabel a, maka nilai variabel...} {...a kini menjadi 5} end. CONTOH 4 Perhatikan contoh program di bawah ini: program contoh_4_Array_dan_Record; type TDataMhs=record NIM:string[10]; Nama:string[40]; IPK:real; end; TArrDataMhs=array[1..100] of TDataMhs; var ArsipMhs:TArrDataMhs; alamatArsipMhs:^TArrDataMhs; begin ArsipMhs[1].NIM:='123456790'; ArsipMhs[1].Nama:='Budi'; ArsipMhs[1].IPK:=3.5; alamatArsipMhs:=@ArsipMhs; writeln(alamatArsipMhs^[1].NIM); {output:123456790} alamatArsipMhs^[1].Nama:='Wati'; writeln(ArsipMhs[1].Nama); {output:Wati} end. CONTOH 5 (CONTOH YANG SALAH) Penggunaan variabel pointer yang akan menimbulkan pesan kesalahan adalah sebagai berikut: program CONTOH_5_YANG_MENIMBULKAN_ERROR_MESSAGE; var a:integer; alamat1,alamat2:^integer; alamat3:^real; begin alamat1:=@a;

4

alamat2:=alamat1; alamat3:=alamat1; {