Rabu, 06 Februari 2013

Pointer pada C / C++




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