Pointer adalah suatu variabel
yang menyimpan alamat memori yang menyimpan suatu nilai. Yang harus
diperhatikan dalam mempelajari pointer yaitu bila menggunakan pointer dengan
carta yang salah maka akan menyebabkan sistem operasi menjadi rusak.
Satu byte di dalam memori akan
memiliki sebuah alamat. Di dalam alamat memori inilah sebuah variabel akan
disimpan. Pointer di dalam progaram dimaksudkan untuk menunjuk suatu alamat
memori variabel. Contoh ada sebuah variabel bernama point yang bertindak
sebagai pointer dan sebuah variabel varpoint yang bertindak sebagai variabel
yang alamatnya akan ditunjuk oleh point.
Alamat suatu variabel dapat
diketahui dengan mudah. Caranya menggunakan operator alamat yaitu simbol & (and) di depan suatu variabel. Sebagai contoh
variabel bertipe integer bernama x maka untuk menampilkan alamatnya &x.
Ciri khas dari variabel pointer
yaitu terletak pada apa yang disimpannya. Bentuk pendeklarasian variabel
pointer adalah sbb :
tipe_data
*nama_variabel;
atau
tipe_data*
nama_variabel;
|
Bentuk umum tersebut
menggambarkan bahwa pointer yang di deklarasikan akan ditempati oleh data
dengan tipe data yang disebutkan ketika pendeklarasian. Contoh :
Int
*nama_variabel;
|
Tipe data pada pendeklarasian
variabel harus sama dengan tipe data variabel yang ditunjuk. Disarankan
menggunakan variabel p untuk
mempermudah membedakan variabel pointer dengan variabel biasa.
Setelabh di deklarasikan,
variabel pointer harus ditugaskan untuk menunuk variabel. Hal ini dilakukan
supaya variabel pointer dapat menunjuk variabel lain yang bersangkutan. Bentuk
umunnya sbb :
variabel_pointer=&variabel_yang_ditunjuk;
|
Pernyataan diatas berarti
variabel pointer diisi dengan alamat dari variabel yang ditunjuk. Untuk dapat
mengakses alamat dari variabel yang ditunjuk pointer, tinggal menyebutkan nama
variabel pointernya saja sedangkan untuk mengakses nilai dari variabel yang
ditunjuk oleh pointer harus menyebutkan nama variabel pointer diawali dengan tanda
* .
Perlu diketahui bahwa hasil
eksekusi pada bahasa C dan C++ akan berbeda. Perbedaanya terletak dalam
menampilkan alamat memori. Bahasa C menyebutkan dua 0 di depan alamat memori contoh : 0022ff44 . Sedangkan pada C++ tidak , contoh : 22ff44.
Pointer tidak bertipe (pointer
void) yaitu pendeklarasian variabel tanpa menyebutkan tipe datanya terlebih
dahulu (tipe datanya diisi void). Hal ini dilakukan agar satu pointer dapat
menunjuk variabel yang berbeda tipe data.
Bentuk umum pendeklarasian pointer tak bertipe sbb :
void *nama_pointer;
|
Dalam pemanggilan alamat dan
nilainya, variabel pointer harus disetai dengan tipe datanya. Bentuk
pemanggilannya sbb :
//Pemanggilan alamat
(tipe_data*)nama_pointer;
//pemanggilan nilai
*( tipe_data*)nama_pointer;
|
Pointer dan array memiliki
hubungan yang dekat. Secara internal array pun menyatakan alamat. Contoh array
yang menyimpan 5 bilangan bulat sbb :
Int bil_bulat []={0,1,2,3,4};
|
Dan sebuah pointer yang akan menunjuk array
tersebut sebagai berikut :
Int *pbil_bulat;
|
Maka penugasan pointer terhadap variabel
arraynya sebagai berikut :
pbil_bulat=bil_bulat;
atau
pbil_bulat=&bil_bulat[indeks];
|
Dalam penugasan pointer di atas
terdapat pernyataan yang tidak menggunakan &.
Hal ini disebabkan karena nama array sebenarnya sudah menunjuk suatu alamat
sehingga tanda & tidak lagi diperlukan. Ada cara lain untuk pengaksesan
seluruh isi elemen array. Caranya sbb :
//pengaksesan nilai array
For(var=0;var<maks_array;var++)
{
//perintah output diikuti
*(nama_array+var)
}
//pengaksesan alamat
For(var=0;var<maks_array;var++)
{
//perintah output diikuti (nama_array+var)
}
|
Pointer juga bisa digunakan untuk
menunjuk variabel bertipe string. Adapun contoh pendeklarasiannya sbb : char *pstring=”UNIKOM”; maka
pemanggilan alamtnya sbb: printf(“Alamat
string : 0x%p”,&pstring);.
Selain untuk menunjuk variabel
biasa, pointer juga bisa digunakan untuk menunjuk variabel pointer yang lain.
Bentuk umum pointer menunuk pointer adalah sebagai berikut :
//pendeklarasian
tipe_data nama_variabel;
tipe_data *pointer1;
//menunjuk ke variabel
tipe_data **pointer2;
//menunjuk ke pointer
//penugasan
pointer1=&nama_variabel;
pointer2=&pointer1;
//pemanggilan nilai
perintah output diikuti
perintah **pointer2
//pemanggilan alamat
perintah output diikuti
perintah *pointer2
|
Salah satu pengaplikasian pointer
adalah untuk memanejemen memori dinamis. Maksudnya seorang programer bisa
memesan memori untuk variabelnya ketika program sedang dijalankan. Ada dua
pasang perintah yang bisa digunakan yaitu :
1.
Malloc dan free
2.
New dan delete.
Malloc adalah perintah untuk mengalokasikan memori ketika program
sedang berjalan sedangkan free adalah
perintah untuk mendealokasikan memori ketika program sedang berjalan. Bentuk
umum malloc dan free sbb :
//malloc
pointer = (tipe_data
*)malloc(sizeof(tipe_data)*jumlah_data);
//free
Free(pointer);
|
Perbedaan pada bahasa C dan C++
yaitu terletak pada perintah input data dinamis. Dalam bahasa C++ perintah
cin>> harus diikuti dengan *nama_pointer
sedangkan pada C tidak perlu.
Sama seperti mallic dan free, new digunakan untuk mengalokasikan
memori sedangkan delete untuk
dealokasi memori. Tetapi perintah ini mempunyai kelemahan yaitu harus
menyertakan file header cstdlib yang
hanya ada di C++. Bentuk umunya sbb :
//new
pointer = new
tipe_data_pointer; //satu memori
atau
pointer = new
tipe_data_pointer[jumlah_data];
//delete
delete pointer;
|
Tidak ada komentar:
Posting Komentar