pointer part 1 n.
Download
Skip this Video
Loading SlideShow in 5 Seconds..
Pointer (Part 1) PowerPoint Presentation
Download Presentation
Pointer (Part 1)

Loading in 2 Seconds...

play fullscreen
1 / 41
shafira-campbell

Pointer (Part 1) - PowerPoint PPT Presentation

156 Views
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. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server.

- - - - - - - - - - - - - - - - - - - - - - - - - - - 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(); }