1 OINTER Pointer biasanya diartikan sebagai penunjuk yaitu penunjuk alamat memori Pointer adalah sebuah variabel khusus yang berbeda dengan variabel b...
Pointer biasanya diartikan sebagai penunjuk yaitu penunjuk alamat memori. Pointer adalah sebuah variabel khusus yang berbeda dengan variabel biasa yang sudah kita kenal selama ini . Jika variabel biasa maka begitu dia dideklarasikan maka langsung akan menempati sebuah lokasi dalam memori (RAM) dan variabel ini berfungsi untuk menyimpan data. Sedangkan variabel pointer ketika dideklarasikan akan menempati sebuah lokasi atau tempat dalam memori akan tetapi tidak berfungsi untuk menyimpan data namun hanya menyimpan alamat variabel lain. Pointer hanya menyimpan data alamat variabel lain. Jadi pointer hanya menunjuk alamat variabel lain. Variabel pointer sering disingkat dengan pointer saja. Pengertian tentang lokasi dan alamat memori akan dibahas secara rinci dalam sub bab berikut ini. 1.1 Struktur Memori Untuk memahami konsep tentang pointer maka kita harus memahami tentang struktur dari memori komputer. Berikut ini akan diuraikan tentang struktur memori komputer. Sebagai ilustrasi andaikan sebuah komputer memiliki memori yang kapasitas penyimpanannya sebesar 1 Kbyte seperti diperlihatkan dalam gambar 1.1. Dalam gambar terlihat setiap lokasi memori memiliki sebuah alamat. Dan setiap lokasi memori dapat menyimpan data yang besarnya 1 byte. Kita mengetahui bahwa 1 Kbyte sama dengan 1024 byte. Sehingga dapat dilihat alamat memori dimulai dari 0 sampai 1023. Tampak dalam gambar bahwa pada lokasi memori dengan alamat 2 dan 3 sudah berisi data karakter secara berurutan yaitu : A dan B. Sedangkan lokasi yang lain masih kosong. Alamat
Lokasi Memori
0 1
02 03 .
0. . . . . . 1022
A B . . . . . . .
1023
Gambar 1.1 Struktur memori (RAM)
Pemrograman Komputer Lanjut
1
Jika kita mendeklarasikan variabel seperti diperlihatkan dalam potongan program berikut ini : void m ai n( ) { int A = 100; char B = ’W’; float C = ’Z’; }
Maka setelah potongan program ini dieksekusi maka kondisi memori adalah seperti diperlihatkan dalam gambar 1.2. Alamat . . . 509 . . 510 . . 511 . . . . . . 1022 .
Lokasi Memori variabel 100
A
W . . . . . . .z
B
C
1023
Gambar 1.2 Letak variabel dalam memori Dalam gambar 1.2 terlihat variabel A menempati alamat 509 dan 510. Variabel A menempati 2 lokasi karena tipe datanya adalah int (integer). Hal ini disebabkan oleh karena tipe data integer panjangnya 2 byte sehingga memerlukan 2 lokasi memori. Isi data dari lokasi memori 509 dan 510 adalah 100. Sementara itu variabel B menempati alamat 511 dan variabel C berada pada alamat 1022. Kedua variabel ini bertipe char (character). Isi dari lokasi memori 511 adalah W sedangkan isi dari lokasi 1022 adalah z. Dimana tipe data char memiliki panjang 1 byte sehingga hanya memerlukan 1 lokasi memori. Penempatan variabel dalam memori tidak selalu berada pada alamat-alamat tersebut tetapi tergantung kondisi memori saat itu. Pengaturan atau penempatan lokasi variabel-variabel dalam memori diatur oleh sistem operasi. 1.2 Mendefinisikan Variabel Pointer Kalau kita mendefinisikan variabel biasa dimana tipe datanya berupa integer maka bentuk programnya adalah : int A;
Definisi diatas berarti kita membuat variabel yang bernama A dengan tipe datanya adalah integer. Untuk mendefinisikan variabel pointer maka kita harus menambahkan simbul tambahan berupa tanda ’*’ sebelum nama variabel : Pemrograman Komputer Lanjut
2
int *A;
tanda ’*’ disebut sebagai operator dereferensi. Jika kita tidak menyertakan tanda ’*’ maka kompiler akan menganggap variabel A sebagai variabel biasa yang bertipe integer. Seperti sudah dijelaskan sebelumnya bahwa variabel pointer adalah variabel yang menunjuk alamat variabel lain. Saat pointer dideklarasikan maka kita harus menentukan tipe data yang akan ditunjuk oleh pointer tersebut. Seperti contoh deklarasi sebelumnya bahwa pointer A adalah pointer ke data integer. Berikut adalah contoh pointer ke data pecahan (floating point) : float *B;
Anda dapat membuat variabel pointer untuk semua tipe data yang ada. Kita dapat memberikan variabel pointer dengan nama apa saja sama seperti variabel biasa. Setelah kita mendefinisikan variabel pointer maka selanjutnya kita harus menginisialisasi variabel tersebut dengan nilai. Perlu diingat bahwa nilai yang disimpan oleh variabel pointer adalah alamat variabel lain. Jadi pointer tidak menampung data. Data yang ditampung oleh pointer hanyalah berupa alamat. Untuk menyimpan alamat variabel lain kita memerlukan sebuah operator alamat yaitu : &. Operator ini berfungsi untuk mengembalikan alamat suatu variabel. Untuk lebih jelasnya lihatlah potongan program berikut ini : int a; float b; int *Pa; //deklarasi pointer ke integer float *Pb; //deklarasi pointer ke floating point Pa = &a; //pointer Pa diisi alamat variabel a. Pb = &b; //pointer Pb diisi alamat variabel b;
Dari potongan program tersebut pertama terlihat bahwa kita mendeklarasikan 2 buah variabel biasa (bukan pointer) yaitu : a dan b. Disamping itu kita juga mendeklarasikan 2 buah variabel pointer yaitu Pa dan Pb. Setelah itu pointer Pa diisi dengan alamat variabel a. Demikian juga pointer Pb diisi dengan alamat variabel b. Gambaran kondisi memori saat potongan program tersebut dieksekusi diperlihatkan dalam gambar 1.3 berikut ini. Alamat . . . 509 . 510 . 511 . 512 . 513 514
Potongan program berikut ini juga memperlihatkan tentang pemakaian pointer : int jumlah =100; int *Pjumlah; //pointer ke integer Pjumlah = &jumlah; //pointer Pjumlah diisi alamat variabel jumlah;
Jika kita melihat keadaan memori ketika program ini dijalankan maka akan terlihat seperti gambar 1.4. Variabel j u m lah menempati lokasi memori dengan alamat 400 dan 401. Dimana data yang mengisi lokasi tersebut adalah 100. Sedangkan pointer Pj um l ah menempati lokasi 701. Dan isi dari lokasi tersebut adalah 400 yang menunjukkan alamat dari variabel jumlah. Alamat . . . 400 . 401 . . .
701 . . . . . Gambar. 1.4 .
Lokasi Memori . . . . 100 . . .Z Z
400 . . . . . . Penunjukan .
variabel jumlah
Pjumlah
alamat oleh Pointer
1.3 Mengakses Nilai Yang Ditunjuk Pointer Kita dapat mengakses dan memanipulasi nilai yang tersimpan dalam variabel yang ditunjuk oleh pointer. Adapun cara yang bisa kita gunakan adalah dengan memakai operator ’*’ di depan nama pointer. Untuk lebih jelasnya maka perhatikanlah potongan program berikut ini : int jumlah = 100; int *Pjumlah ; Pjumlah = &jumlah; *Pjumlah = 200; //Memanipulasi isi dari variabel jumlah menjadi 200
Dari potongan program tersebut diatas maka setelah pernyataan : *Pjumlah = 200;
dieksekusi maka isi data dari variabel j um l ah akan berubah menjadi 200. Contoh program berikut ini merupakan contoh tentang pengaksesan nilai yang ditunjuk oleh variabel pointer. include void main() { int a= 10; int *Pa; cout<<” Isi dari variabel a mula-mula = ”<
4