Pemrograman Dasar Pointers
Memory Memory merupakan ruang penyimpanan informasi di dalam komputer. Memory dalam komputer dibagi ke dalam satuan-satuan kecil yang disebut Byte. Masing-masing byte pada memory memiliki alamat tersendiri. Komputer mengakses (baca atau tulis) memory dengan menggunakan alamat tersebut.
Pointer Pointer seperti variabel, menyimpan suatu nilai. Hanya saja, nilai yang disimpan di dalam pointer adalah berupa alamat memori.
Operator referensi Untuk melihat alamat memori suatu variabel, kita dapat menggunakan operator referensi : " & ". Misalkan pernyataan: abc = &def; Menugaskan nilai alamat variabel def ke dalam abc.
Alamat memory variabel void main() { int abc = 5; float def = 7.5; double ghi = 17.777; cout<<"Isi variabel :"<<endl; cout<<"abc : "<<abc<<endl; cout<<"def : "<<def<<endl; cout<<"ghi : "<<ghi<<endl; cout<<"\nAlamat variabel :"<<endl; cout<<"abc : "<<&abc<<endl; cout<<"def : "<<&def<<endl; cout<<"ghi : "<<&ghi<<endl; system("pause"); }
Deklarasi Pointer Suatu variabel pointer dideklarasikan sebagai berikut: tipeData* namaPointer; tipeData *namaPointer; Contoh: int *a; float *b, *c; // bukan float *b, c;
Deklarasi pointer Agar pointer menunjuk ke variabel lain, mula-mula harus diisi dengan alamat suatu variabel. Contoh: int nilai; int *pNilai; Pointer pNilai diatur agar menunjuk ke variabel a dengan cara: pNilai = &nilai;
Operator dereferensi Untuk mengakses nilai yang berada pada alamat yang ditunjuk oleh pointer, kita menggunakan operator " * ". Contoh: int nilai = 20; int *pNilai; pNilai = &nilai; cout<< *pNilai <<endl; Setelah pernyataan pNilai = &nilai, maka variabel nilai dengan *pNilai menjadi sama.
Pointer Perlu diingat bahwa operator "*" pada pernyataan int *pNilai; tidak sama dengan operator "*" pada cout<<*pNilai<<endl; Yang pertama adalah deklarasi pointer bernama pNilai. Tanda "*" tersebut hanya menyatakan bahwa pNilai adalah suatu pointer. Sedangkan yang kedua adalah operator dereferensi yang menunjuk ke alamat yang ditunjuk oleh pointer pNilai. Penggunaan tanda "*" pada saat deklarasi pointer dengan di dalam pernyataan harus dibedakan.
Contoh int main () { int abc, def; int *tunjuk; tunjuk = &abc; tunjuk = &def; *tunjuk = 20; cout << "nilai abc: " << abc << endl; cout << "nilai def: " << def << endl; system("pause"); return 0; }
Pointer Misalkan terdapat potongan kode program seperti berikut: int andy, fred; int *ted; andy = 25; fred = andy; ted = &andy; Maka nilai tiap variabel setelah itu adalah:
Pointer Jika program sebelumnya dilanjutkan dengan: int beth; beth = *ted; Maka isi masing-masing variabel adalah: Keterangan tambahan: beth=ted; // beth sama dengan ted (1776) beth=*ted; //beth adalah nilai yang ditunjuk oleh ted (25)
Inisialisasi pointer Suatu pointer dapat langsung diisi nilai saat deklarasi. Caranya: int angka; int *pAngka = &angka; Pernyataan ini ekivalen dengan: int *pAngka; pAngka = &angka; Dan BERBEDA dengan: int *pAngka; *pAngka = &angka;
Uji pemahaman Terka output program berikut: int main () { int abc = 5, def = 15; int *p1, *p2; p1 = &abc;//p1=alamat abc p2 = &def;//p2=alamat def *p1 = 10; //nilai yang ditunjuk p1=10 *p2 = *p1; //nilai yang ditunjuk p2=nilai yang ditunjuk p1 p1 = p2; //p1=p2 (nilai pointer disalin) *p1 = 20; // nilai yang ditunjuk p1=20 cout << "isi abc " << abc << endl; cout << "isi def " << def << endl; system("pause"); return 0; }
Pointer dan Array Pointer dan array mempunyai hubungan yang dekat. Secara internal, array juga menyatakan alamat. Misalkan terdapat suatu array dan suatu pointer: int angka [5]; int *pArray; Maka agar pointer pArray menunjuk ke array angka, pernyataan yang valid adalah: pArray = angka; Sebaliknya, pernyataan pArray = &angka; menjadi tidak valid karena array angka juga merupakan suatu identifier yang menyatakan alamat.
Pointer dan Array Meskipun pArray = angka; boleh dilakukan, perintah angka = pArray tidaklah valid. Hal ini karena tidak seperti alamat pada pointer pArray, alamat pada array angka tidak dapat diubah. Suatu array dapat dipandang sebagai konstanta pointer.
Pointer dan Array Setelah baris pArray = angka, maka: Identifier angka[0] sama dengan *pArray. Identifier angka[1] sama dengan *(pArray+1). Identifier angka[2] sama dengan *(pArray+2). Array pointer juga dapat digeser. Misalkan mula-mula pArray menunjuk pada angka[0], maka: int angka[5] = {1,2,3,4,5}; int *pArray = angka; cout<<*pArray<<endl; pArray++; cout<<*pArray<<endl; pArray+=2; cout<<*pArray<<endl; pArray=&angka[2]; cout<<*pArray<<endl; Array isi angka[0] 1 angka[1] 2 angka[2] 3 angka[3] 4 angka[4] 5
Contoh array pointer int main () { int angka[5]; int * p; p = angka; *p = 10; p++; *p = 20; p = &angka[2]; *p = 30; p = angka + 3; *p = 40; p = angka; *(p+4) = 50; for (int n=0; n<5; n++) cout << angka[n] <<endl; system("pause"); return 0; }
Thank You for your attention Thanks to: cplusplus.com Pemrograman C++ by Abdul Kadir Yoannita S.Kom & Hermawan S.Kom Sumber slide