1 / 41

Pointer (Part 1)

Pointer (Part 1). Alamat dan Pointer. Konsep pointer sebenarnya cukup sederhana. Pointer sesungguhnya berisi alamat dari suatu data, bukan data sebagaimana variabel yang telah anda kenal. Alamat dan Pointer. Setiap byte di dalam memori komputer memiliki sebuah alamat.

Download Presentation

Pointer (Part 1)

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Pointer(Part 1)

  2. Alamat dan Pointer • Konsep pointer sebenarnya cukup sederhana. • Pointer sesungguhnya berisi alamat dari suatu data, bukan data sebagaimana variabel yang telah anda kenal.

  3. Alamat dan Pointer • Setiap byte di dalam memori komputer memiliki sebuah alamat. • Di dalam memori inilah variabel disimpan. • Tetapi tentu saja pemrogram tidak perlu menyebutkan alamat dari suatu variabel secara explisit. • Pada saat program dimuat di dalam memori, variabel akan diletakkan dengan sendirinya pada alamat tertentu.

  4. Alamat dan Pointer • Suatu pointer didalam program dimaksudkanuntukmenunjuksuatualamatmemori. • Misalnyakalaupintadalah pointer, danvintadalahvariabel yang terletakdimemoriberalamat0xfff2, pointer pintdapatdiatur agar menunjukkevariabelvint.

  5. Alamat dan Pointer

  6. Mengetahui Alamat Suatu Variabel • Alamat suatu variabel dapat diketahui dengan mudah, caranya tambahkan operator alamat, berupa simbol & di depan nama variabel. • Dengan mengirimkan ke cout, alamat dari suatu variabel akan ditampilkan ke layar.

  7. #include <iostream.h> #include <conio.h> void main() { int bil1 = 5; float bil2 = 7.5; double bil3 = 17.777; cout<<"Isivariabel : "<<endl; cout<<"bil1 = "<<bil1<<endl; cout<<"bil2 = "<<bil2<<endl; cout<<"bil3 = "<<bil3<<endl; cout<<endl; cout<<"Alamatvariabel : "<<endl; cout<<"bil1 = "<<&bil1<<endl; cout<<"bil2 = "<<&bil2<<endl; cout<<"bil3 = "<<&bil3<<endl; getch(); } Mengetahui Alamat Suatu Variabel

  8. MengetahuiAlamatSuatuVariabel • Perludiketahui, notasi 0x padahasil program didepanmenyatakannotasiheksadesimal. • Pada C++, tanda & jugadipakaiuntukreferensi (alias darisuatuvariabel).

  9. Mendefinisikan Variabel Pointer • Format : • tipe_datadapatberupasembarangtipe data sepertihalnyavariabelbukan pointer. • nama_variabeladalahvariabel pointer. tipe_data *nama_variabel

  10. MengisiVariabel Pointer • Supayavariabel pointer menunjukkevariabel lain, mula-mulaharusdiisidenganalamatdarivariabel yang hendakditunjuk. • Misalnyaterdapatpendefinisiansepertiberikut : • Variabelpint dapatdiatur agar menunjukkevintdengancarasebagaiberikut : • Pernyataandiatasberarti : “pintdiisidenganalamatdarivint”. int vint = 55; int *pint; pint = &vint;

  11. #include <iostream.h> #include <conio.h> void main() { intvint = 55; int *pint; pint = &vint; //pointer menunjukkevint cout<<"Alamatvint = "<<&vint<<endl; cout<<"Isi pint = "<<pint<<endl; getch(); }

  12. Mengisi Variabel Pointer • Pada contoh di depan : • Baris tersebut ternyata menampilkan isi dari pointer itu sendiri, bukan isi dari variabel vint. cout<<"pint = "<<pint<<endl;

  13. Mengakses Nilai Yang Ditunjuk Pointer • Berdasarkancontohdidepan, nilaidarivintdapatdiaksesmelaluipint setelahpernyataandibawahinidijalankan. • Cara mengaksesnyaadalahdenganmelibatkan operator “taklangsung” yang berupasimbol * dandiletakkandidepannamavariabel pointer. Contoh : • Berarti “nilai yang ditunjukolehpint”. pint = &vint; *pint;

  14. #include <iostream.h> #include <conio.h> void main() { intvint = 55; int *pint; pint = &vint; //pointer menunjukkevint cout<<"Isivint = "<<vint<<endl; cout<<"Alamatvint = "<<&vint<<endl; cout<<"Isi pint = "<<pint<<endl; cout<<"Nilai yang ditunjukoleh pint : "<<*pint<<endl; getch(); }

  15. Mengakses Nilai Yang Ditunjuk Pointer • Program di depan menunjukkan pengaksesan terhadap vint dapat dilakukan melalui *pint. • Contoh berikut menunjukkan isi vint diubah melalui *pint.

  16. #include <iostream.h> #include <conio.h> void main() { intvint = 55; int *pint; pint = &vint; //pointer menunjukkevint cout<<"Isivintsemula = "<<vint<<endl; *pint = 77; cout<<"Isivintsekarang = "<<vint<<endl; getch(); }

  17. Pointer Void • Padacontoh-contoh program didepantelahditunjukkan pointer yang menunjukketipe data tertentu. • Sebenarnyajugadimungkinkanuntukmembuat pointer takbertipe. • Caranyayaknidenganmeletakkankatakunci void dibagianpenentutipe pointer. Contoh : • Suatu pointer void seperticontohdiatasdapatdigunakanuntukmenunjukkesembarangtipe data. void *ptr;

  18. #include <iostream.h> #include <conio.h> void main() { int bil1 = 55; float bil2 = 33.45; void *ptr; ptr = &bil1; //bisamenunjukkeint cout<<"Nilai yang ditunjukptr : "<<*(int*)ptr<<endl; ptr = &bil2; //bisamenunjukke float cout<<"Nilai yang ditunjukptr : "<<*(float*)ptr<<endl; getch(); }

  19. Pointer Void • Pada program didepan, bentukberikutperludiberikan : • Inidisebabkan C++ tidaktahumaksud*ptrmengingatptradalah pointer void. • Cara inibukanhanyaberlakujikakitabermaksudmengambilnilai yang ditunjukolehptrtapijugaketikakitamengubahnya. • Seperticontoh program berikut : *(int*)ptr *(float*)ptr

  20. #include <iostream.h> #include <conio.h> void main() { intbilangan = 55; void *ptr; ptr = &bilangan; cout<<"bilangansemula : "<<bilangan<<endl; *(int*)ptr = 77;//mengubahnilaibilanganmelaluiptr cout<<"bilangansekarang : "<<bilangan<<endl; getch(); }

  21. Pointer(Part 2)

  22. Pointer dan Array • Pointer dan array memiliki hubungan yang dekat. Secara internal array juga menyatakan alamat. Misalnya, didefinisikan : • Agar ptgl menunjuk ke array, diperlukan pernyataan berupa : • Perhatikan tidak ada tanda & di depan tgl_lahir. Ini disebabkan nama array sebenarnya sudah menyatakan alamat. Oleh karena itu tanda & tidak diperlukan. int tgl_lahir[] = {24, 6, 1965}; int *ptgl; ptgl = tgl_lahir;

  23. Pointer dan Array • Pernyataan seperti : • Dimana ptgl adalah pointer dan tgl_lahir adalah array, identik dengan : ptgl = tgl_lahir; ptgl = &tgl_lahir[0];

  24. #include <iostream.h> #include <conio.h> void main() { inttgl_lahir[] = {24, 6, 1965}; int *ptgl; ptgl = tgl_lahir; //ptglmenunjukke array cout<<"Nilai yang ditunjukolehptgl : "; cout<<*ptgl<<endl; cout<<"Nilaidaritgl_lahir[0] : "; cout<<tgl_lahir[0]<<endl; getch(); }

  25. Pointer dan Array • Seluruhelemen array dapatditampilkandenganpernyataan : • Bentuktgl_lahir[i]dapatdiubahmenjadinotasi pointer sepertiberikut : • Contoh program : for(int i=0; i<3; i++) cout<<tgl_lahir[i]<<endl; for(int i=0; i<3; i++) cout<<*(ptgl + i)<<endl;

  26. #include <iostream.h> #include <conio.h> void main() { inttgl_lahir[] = {24, 6, 1965}; int *ptgl; ptgl = tgl_lahir; //ptglmenunjukke array for(inti=0; i<3; i++) cout<<*(ptgl + i)<<endl; getch(); }

  27. Pointer dan Array • Perlu diketahui, pada notasi seperti : • tgl_lahir + i tidak berarti : • Tetapi dengan bijaksana dapat mengetahui bahwa tgl_lahir + i berarti : *(ptgl + i) ptgl + (i byte) ptgl + (ukuran tipe elemen ptgl)*i

  28. Pengaksesan Array Melalui Pointer

  29. Pointer dan Array • Seluruh elemen array juga dapat diakses melalui variabel pointer. • Salah satu caranya yaitu dengan mengubah isi variabel pointer sesuai dengan alamat masing-masing elemen array.

  30. #include <iostream.h> #include <conio.h> void main() { inttgl_lahir[] = {24, 6, 1965}; int *ptgl; ptgl = tgl_lahir; for(inti=0; i<3; i++) { cout<<"ptgl = "<<ptgl<<endl; cout<<"*ptgl = "<<*ptgl<<endl; ptgl++; } getch(); }

  31. Pointer(Part 3)

  32. Pointer dan String • Contohhubungan pointer dan string : #include <iostream.h> #include <conio.h> void main() { char *ptokoh = "gatotkaca"; cout<<ptokoh<<endl; getch(); }

  33. Pointer dan String • Padacontohdiatas : • Akanmenyebabkan C++ : • Mengalokasikanptokohsebagaivariabel pointer yang menunjukke data bertipechar danmenempatkankonstanta string “gatotkaca” kesuatulokasidimemorikomputer. • Kemudianptokohakanmenunjukkelokasi string “gatotkaca”. char *ptokoh = “gatotkaca”;

  34. Pointer dan String • Pernyataan didepan menyerupai pernyataan : • Perbedaannya : • ptokoh adalah pointer yang dengan mudah dapat diatur agar menunjuk ke data string. • tokoh adalah array yang menyatakan alamat yang konstan, tidak dapat diubah. Yang dapat diubah adalah elemen array-nya. • Perbedaannya ditunjukkan oleh program berikut : char tokoh[] = “gatotkaca”;

  35. #include <iostream.h> #include <conio.h> void main() { char tokoh[] = "gatotkaca"; char *ptokoh = "gatotkaca"; cout<<"tokoh = "<<tokoh<<endl; cout<<"ptokoh = "<<ptokoh<<endl; //tokoh++; //tidakdiperkenankan ptokoh++; //diperkenankan cout<<"ptokoh = "<<ptokoh<<endl; getch(); }

  36. Array Pointer • Suatu array bisa digunakan untuk menyimpan sejumlah pointer. Contoh : • Merupakan pernyataan untuk mendefinisikan array namahari yang berisi 7 buah elemen berupa pointer. • Pointer ini menunjuk ke data bertipe char. char *namahari[7];

  37. #include <iostream.h> #include <conio.h> void main() { char *namahari[7] = {"senin", "selasa", "rabu", "kamis", "jum'at", "sabtu", "minggu"}; for(inti=0; i<7; i++) { cout<<namahari[i]<<endl; } getch(); }

  38. Pointer Menunjuk Pointer • Suatu pointer bisa saja menunjuk pointer yang lain. • Untuk itu diperlukan pendefinisian sebagai berikut : intvar_x; int *ptr1; //satutanda * didepan ptr1 int **ptr2; //duatanda * didepan ptr2

  39. Pointer Menunjuk Pointer • Pada pendefinisian diatas : • var_x adalah variabel bertipe int. • ptr1 adalah variabel pointer yang menunjuk ke data bertipe int. • ptr2 adalah varibel pointer yang menunjuk ke pointer int. • Agar ptr1 menunjuk ke var_x dan ptr2 menunjuk ke ptr1, maka diperlukan perintah : ptr1 = &var_x; ptr2 = &ptr1;

  40. #include <iostream.h> #include <conio.h> void main() { intvar_x = 273; int *ptr1; int **ptr2; cout<<"var_x = "<<var_x<<endl; ptr1 = &var_x; ptr2 = &ptr1; //mengaksesnilaivar_xmelalui ptr1 cout<<"*ptr1 = "<<*ptr1<<endl; //mengaksesnilaivar_xmelalui ptr2 cout<<"**ptr1 = "<<**ptr2<<endl; getch(); }

More Related