1 / 24

Pointer

Pointer. Informatique Engineering Ahmad Dahlan University May 17, 2004. Pendahuluan. Pointer merupakan salah satu jenis data terstruktur Dengan menggunakan pointer, suatu variabel dapat diciptakan atau dihapus selama pengeksekusian program,  variabel (objek) dinamis

umay
Download Presentation

Pointer

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 Informatique Engineering Ahmad Dahlan University May 17, 2004

  2. Pendahuluan • Pointer merupakan salah satu jenis data terstruktur • Dengan menggunakan pointer, suatu variabel dapat diciptakan atau dihapus selama pengeksekusian program,  variabel (objek) dinamis • Untuk membuat struktur data dinamis : link list, queue, stack,tree ukurannya menjadi fleksibel

  3. Pointer • variabel yang menunjuk alamat memory objek lain (menyimpan alamat dari suatu objek • variabel pointer bukan berisi data

  4. Statis memori diperoleh secara otomatis memori dikembalikan secara otomatis bila objek keluar dari ruang lingkup tertentu (fungsi, sebagai contoh) int A[10]; // tertentu banyaknya Dinamis memori diperoleh dari operasi new objek dinamis masih ada (exist) di luar fungsi di mana “dia” dialokasikan objek di memori hanya dapat dihapus dengan operasi delete int n; cin >> n; int *A = new int[n]; Objek Statis vs Objek Dinamis

  5. Memori Untuk Objek Dinamis • Diminta dari free memory (dikontrol sistem operasi) • Permintaan memori harus ditentukan : tipe dan banyaknya objek • Jika memori tersedia : pointer ke memori akan dikembalikan • Jika tidak tersedia : pointer null akan dikembalikan

  6. Definisi Variabel Pointer • Pointer yang menunjuk objek bertipe int  int *A; • Pointer yang menunjuk objek bertipe char  char *B; • Pointer yang menunjuk objek yang tipenya didefinisikn sendiri  Mahasiswa *Ahmad;

  7. Cara penulisan pada C++ • Contoh pointer yang tidak diberi nilai awal int *iPtr; // iPtr pointer menunjuk objek bertipe int char *s; // s pointer menunjuk objek bertipe char Rational *rPtr; // rPtr pointer menunjuk objek Rational • Contoh pointer yang diberi nilai awal int i = 1; char c = 'y'; int *ptr; // ptr pointer menunjuk objek bertipe int ptr = &i; // ptr pointer menunjuk ke alamat i char *t; // t pointer menunjuk objek bertipe char t = &c; // t pointer menunjuk ke alamat c

  8. 1 i ‘y’ c t ptr Gambaran Pointer int i = 1; char c = 'y'; int *ptr = &i; char *t; t = &c

  9. ”This” dan “That” • pointer box dapat diibaratkan sebagai “this” (tanpa tanda star) • Kotak yang ditunjuk sebagai “that” (bintang) int i = 1; int j = 2; int *p; // p pointer ke int p = &i; // "this" = alamat dari i *p = 3; // "that" = 3 p = &j; // "this" = alamat dari j *p = 4; // "that" = 4 i 1 j 2 p this i that 3 j 2 p this i 3 j that 4 p this

  10. Indirection Operator • Tanda * menunjukkan bahwa : • Suatu objek merupakan pointer char *kata; • * sebelum variabel bahwa yang diinginkan adalah “that” (isi/objek yang ditunjuk) int i = 1, j; int *ptr; // ptr pointer ke int ptr = &i; // ptr menunjuk i j = *ptr + 1; // *ptr  1, sehingga j 2 cout << *ptr << j << endl; // menampilkan : 12 (satu dua bukan dua belas)

  11. Alamat Null • null (= 0) adalah konstan pointer untuk suatu tipe tertentu • menunjukkan bahwa pointer belum menunjuk ke objek tertentu • tidak dapat merujuk kembali (de-reference) int *ptr; ptr = NULL; cout << *ptr << endl; // invalid, ptr tidak menunjuk // ke int yang valid

  12. Member Indirection • Pertimbangkan : Rational r(4,3); Rational *rPtr = &r; • Memilih anggota secara langsung : (*rPtr).Tampilkan(); • Memilih anggota melalui pointer : rPtr->Tampilkan();

  13. Penggunaan secara tradisional void Tukar(char* y, char* z) { char temp = *y; *y = *z; *z = temp; } int main() { char a = 'y'; char b = 'n'; Tukar(&a, &b); cout << a << b << endl; return 0; } Penggunaan pass by reference void Tukar(char& y, char& z) { char temp = y; y = z; z = temp; } int main() { char a = 'y'; char b = 'n'; Tukar(a, b); cout << a << b << endl; return 0; } Perbandingan Penggunaan

  14. class Node { public: int data; Node *berikut; }; //perintah Node *A = new Node; A->data = 1; A->berikut = 0; Node *B = new Node; B->data = 2; B->berikut = 0; A->berikut = B; A A B 1 1 2 0 0 1 1 Aplikasi : Link List

  15. Asumsi : Node *jalan = A; while(jalan != 0) { cout << "Isi elemen : " << jalan->data << endl; ...??? } A A A 2 1 2 2 1 1 0 0 0 jalan jalan Bagaimana mengetahui isi list? (1) • Output : Isi elemen : 1

  16. Asumsi : Node *jalan = A; while(jalan != 0) { cout << "Isi elemen : " << jalan->data << endl; jalan = jalan->berikut; } A A A 2 1 1 1 2 2 0 0 0 jalan jalan jalan Bagaimana mengetahui isi list? (2) * • Output : Isi elemen : 1 Isi elemen : 2

  17. Asumsi : Node *jalan = A; while(jalan != 0) { cout << "Isi elemen : " << jalan->data << endl; jalan = jalan->berikut; } A A A 1 2 2 2 1 1 ? ? ? jalan jalan Bagaimana mengetahui isi list? (3) * * • Output : Isi elemen : 1 Isi elemen : 2 • Stop !!! ?

  18. Asumsi : Node *hapus = new Node; hapus = A; A A 1 2 1 2 ? ? hapus Menghapus elemen pertama (1) 1 1

  19. Asumsi : Node *hapus = new Node; hapus = A; A = A->berikut; A 1 2 1 2 ? ? hapus Menghapus elemen pertama (2) 1 2 1 2 A

  20. Asumsi : Node *hapus = new Node; hapus = A; A = A->berikut; delete hapus; A 1 2 1 2 ? ? hapus Menghapus elemen pertama (3) 1 2 3 3 1 2 A

  21. A A 1 2 1 2 ? ? hapus Menghapus elemen terakhir (1) • Asumsi : Node *hapus = new Node; hapus = A->berikut; 1 1

  22. A A 1 2 1 2 ? ? hapus Menghapus elemen terakhir (2) • Asumsi : Node *hapus = new Node; hapus = A->berikut; delete hapus; 1 2 1 2

  23. A A 1 2 1 2 ? ? 0 hapus Menghapus elemen terakhir (3) • Asumsi : Node *hapus = new Node; hapus = A->berikut; delete hapus; A->berikut = 0; 1 2 3 1 2 3

  24. Latihan • Buatlah algoritma untuk menyalin seluruh elemen sebuah link list. • Buatlah algoritma untuk menyalin seluruh elemen sebuah link list yang genap. • Buatlah algoritma untuk menghapus seluruh elemen sebuah link list yang genap.

More Related