pointer
DESCRIPTION
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 - PowerPoint PPT PresentationTRANSCRIPT
![Page 1: Pointer](https://reader036.vdokumen.com/reader036/viewer/2022062517/568139e7550346895da19f4f/html5/thumbnails/1.jpg)
![Page 2: Pointer](https://reader036.vdokumen.com/reader036/viewer/2022062517/568139e7550346895da19f4f/html5/thumbnails/2.jpg)
Pointer merupakan salah satu jenis Pointer merupakan salah satu jenis data terstruktur data terstruktur
Dengan menggunakan pointer, suatu Dengan menggunakan pointer, suatu variabel dapat diciptakan atau variabel dapat diciptakan atau dihapus selama pengeksekusian dihapus selama pengeksekusian program, program, variabel (objek) dinamis variabel (objek) dinamis
Untuk membuat struktur data Untuk membuat struktur data dinamis : dinamis : link list, queue, stack,link list, queue, stack, treetree ukurannya menjadi fleksibel ukurannya menjadi fleksibel
![Page 3: Pointer](https://reader036.vdokumen.com/reader036/viewer/2022062517/568139e7550346895da19f4f/html5/thumbnails/3.jpg)
variabel yang menunjuk alamat variabel yang menunjuk alamat memory objek lain (menyimpan memory objek lain (menyimpan alamatalamat dari suatu objek dari suatu objek
variabel pointer variabel pointer bukan bukan berisi data berisi data
![Page 4: Pointer](https://reader036.vdokumen.com/reader036/viewer/2022062517/568139e7550346895da19f4f/html5/thumbnails/4.jpg)
Objek Statis vs Objek DinamisObjek Statis vs Objek Dinamis
StatisStatis memori diperoleh memori diperoleh
secara otomatissecara otomatis memori dikembalikan memori dikembalikan
secara otomatis bila secara otomatis bila objek keluar dari objek keluar dari ruang lingkup tertentu ruang lingkup tertentu (fungsi, sebagai (fungsi, sebagai contoh)contoh)
int A[int A[1010]; // tertentu banyaknya]; // tertentu banyaknya
DinamisDinamis memori diperoleh dari memori diperoleh dari
operasi operasi newnew objek dinamis masih objek dinamis masih
ada (exist) di luar ada (exist) di luar fungsi di mana “dia” fungsi di mana “dia” dialokasikandialokasikan
objek di memori objek di memori hanya dapat dihapus hanya dapat dihapus dengan operasi dengan operasi deletedeleteint n;int n;cin >> n;cin >> n;
int *A = new int[int *A = new int[nn];];
![Page 5: Pointer](https://reader036.vdokumen.com/reader036/viewer/2022062517/568139e7550346895da19f4f/html5/thumbnails/5.jpg)
Memori Untuk Objek DinamisMemori Untuk Objek Dinamis
Diminta dari Diminta dari free memoryfree memory (dikontrol (dikontrol sistem operasi)sistem operasi)
Permintaan memori harus ditentukan Permintaan memori harus ditentukan : tipe dan banyaknya objek: tipe dan banyaknya objek
Jika memori tersedia : pointer ke Jika memori tersedia : pointer ke memori akan dikembalikanmemori akan dikembalikan
Jika tidak tersedia : pointer null akan Jika tidak tersedia : pointer null akan dikembalikandikembalikan
![Page 6: Pointer](https://reader036.vdokumen.com/reader036/viewer/2022062517/568139e7550346895da19f4f/html5/thumbnails/6.jpg)
Definisi Variabel PointerDefinisi Variabel Pointer
Pointer yang menunjuk objek bertipe Pointer yang menunjuk objek bertipe int int
int *A;int *A; Pointer yang menunjuk objek bertipe Pointer yang menunjuk objek bertipe
char char char *B;char *B;
Pointer yang menunjuk objek yang Pointer yang menunjuk objek yang tipenya didefinisikn sendiri tipenya didefinisikn sendiri
Mahasiswa *Ahmad;Mahasiswa *Ahmad;
![Page 7: Pointer](https://reader036.vdokumen.com/reader036/viewer/2022062517/568139e7550346895da19f4f/html5/thumbnails/7.jpg)
Cara penulisan pada C++Cara penulisan pada C++ Contoh pointer yang tidak diberi nilai awalContoh pointer yang tidak diberi nilai awal
int *iPtr; // iPtr pointer menunjuk objek bertipe intint *iPtr; // iPtr pointer menunjuk objek bertipe intchar *s; // s pointer menunjuk objek bertipe charchar *s; // s pointer menunjuk objek bertipe charRational *rPtr; // rPtr pointer menunjuk objek RationalRational *rPtr; // rPtr pointer menunjuk objek Rational
Contoh pointer yang diberi nilai awalContoh pointer yang diberi nilai awalint i = 1;int i = 1;char c = 'y';char c = 'y';int *ptr; // ptr pointer menunjuk objek bertipe intint *ptr; // ptr pointer menunjuk objek bertipe intptr = &i; // ptr pointer menunjuk ke alamat iptr = &i; // ptr pointer menunjuk ke alamat ichar *t;char *t; // t pointer menunjuk objek bertipe char // t pointer menunjuk objek bertipe chart = &c; // t pointer menunjuk ke alamat ct = &c; // t pointer menunjuk ke alamat c
![Page 8: Pointer](https://reader036.vdokumen.com/reader036/viewer/2022062517/568139e7550346895da19f4f/html5/thumbnails/8.jpg)
Gambaran PointerGambaran Pointer
int i = 1;int i = 1;
char c = 'y';char c = 'y';
int *ptr = &i;int *ptr = &i;
char *t;char *t;
t = &ct = &cptr
i ‘y’c
1
t
![Page 9: Pointer](https://reader036.vdokumen.com/reader036/viewer/2022062517/568139e7550346895da19f4f/html5/thumbnails/9.jpg)
ijp
””This” dan “That”This” dan “That”
pointer boxpointer box dapat diibaratkan sebagai “this” dapat diibaratkan sebagai “this” (tanpa tanda star) (tanpa tanda star)
Kotak yang ditunjuk Kotak yang ditunjuk sebagai “that” (bintang)sebagai “that” (bintang)
int i = 1;int i = 1;int j = 2;int j = 2;int *p;int *p; // p pointer ke int // p pointer ke int
p = &i;p = &i; // "this" = alamat dari i// "this" = alamat dari i*p = 3;*p = 3; // "that" = 3// "that" = 3
p = &j;p = &j; // "this" = alamat dari j// "this" = alamat dari j*p = 4;*p = 4; // "that" = 4// "that" = 4
43
ijp
21
ijp
23
this
this
this
that
that
![Page 10: Pointer](https://reader036.vdokumen.com/reader036/viewer/2022062517/568139e7550346895da19f4f/html5/thumbnails/10.jpg)
Indirection OperatorIndirection Operator Tanda Tanda ** menunjukkan bahwa : menunjukkan bahwa :
– Suatu objek merupakan pointerSuatu objek merupakan pointer
char char **kata;kata;– ** sebelum variabel bahwa yang diinginkan sebelum variabel bahwa yang diinginkan
adalah “that” (isi/objek yang ditunjuk)adalah “that” (isi/objek yang ditunjuk)
int i = 1, j;int i = 1, j;
int int **ptr; ptr; // ptr pointer ke int// ptr pointer ke int
ptr = &i; ptr = &i; // ptr menunjuk i// ptr menunjuk i
j = j = **ptr + 1;ptr + 1; // // **ptr ptr 1, sehingga j 1, sehingga j 22
cout << cout << **ptr << j << endl; ptr << j << endl;
// menampilkan : 12 (satu dua // menampilkan : 12 (satu dua bukan bukan dua dua belas)belas)
![Page 11: Pointer](https://reader036.vdokumen.com/reader036/viewer/2022062517/568139e7550346895da19f4f/html5/thumbnails/11.jpg)
Alamat NullAlamat Null
null (= 0) adalah konstan pointer untuk null (= 0) adalah konstan pointer untuk suatu tipe tertentusuatu tipe tertentu
menunjukkan bahwa pointer belum menunjukkan bahwa pointer belum menunjuk ke objek tertentumenunjuk ke objek tertentu
tidak dapat merujuk kembali (de-tidak dapat merujuk kembali (de-reference)reference)
int *ptr;int *ptr;
ptr = ptr = NULLNULL;;
cout << *ptr << endl; // invalid, ptr tidak menunjuk cout << *ptr << endl; // invalid, ptr tidak menunjuk
// ke int yang valid// ke int yang valid
![Page 12: Pointer](https://reader036.vdokumen.com/reader036/viewer/2022062517/568139e7550346895da19f4f/html5/thumbnails/12.jpg)
Member IndirectionMember Indirection
Pertimbangkan :Pertimbangkan :Rational r(4,3);Rational r(4,3);
Rational *rPtr = &r;Rational *rPtr = &r;
Memilih anggota secara langsung :Memilih anggota secara langsung :(*rPtr).Tampilkan();(*rPtr).Tampilkan();
Memilih anggota melalui pointer :Memilih anggota melalui pointer :rPtrrPtr->->Tampilkan();Tampilkan();
![Page 13: Pointer](https://reader036.vdokumen.com/reader036/viewer/2022062517/568139e7550346895da19f4f/html5/thumbnails/13.jpg)
Perbandingan PenggunaanPerbandingan Penggunaan Penggunaan secara Penggunaan secara
tradisionaltradisional
void Tukar(void Tukar(char*char* y, y, char*char* z) { z) {char temp = char temp = **y;y;**y = y = **z;z;**z = temp;z = temp;
}}
int main() {int main() {char a = 'y';char a = 'y';char b = 'n';char b = 'n';Tukar(&a, &b);Tukar(&a, &b);cout << a << b << endl;cout << a << b << endl;return 0;return 0;
}}
Penggunaan pass by Penggunaan pass by referencereference
void Tukar(void Tukar(char&char& y, y, char&char& z) z) {{char temp = y;char temp = y;y = z;y = z;z = temp;z = temp;
}}
int main() {int main() {char a = 'y';char a = 'y';char b = 'n';char b = 'n';Tukar(a, b);Tukar(a, b);cout << a << b << endl;cout << a << b << endl;return 0;return 0;
}}
![Page 14: Pointer](https://reader036.vdokumen.com/reader036/viewer/2022062517/568139e7550346895da19f4f/html5/thumbnails/14.jpg)
Aplikasi : Link ListAplikasi : Link List
class Node {class Node {public: public:
int data;int data;Node *berikut;Node *berikut;
};};//perintah//perintahNode *A = new Node;Node *A = new Node; A->data = 1;A->data = 1; A->berikut = 0;A->berikut = 0;
Node *B = new Node;Node *B = new Node; B->data = 2;B->data = 2; B->berikut = 0;B->berikut = 0; A->berikut = B;A->berikut = B;
1 0A 1A
2 0B
1
1
![Page 15: Pointer](https://reader036.vdokumen.com/reader036/viewer/2022062517/568139e7550346895da19f4f/html5/thumbnails/15.jpg)
Bagaimana mengetahui isi list? (1)Bagaimana mengetahui isi list? (1)
Asumsi :Asumsi :
Node *jalan = A;Node *jalan = A;
while(jalan != 0) {while(jalan != 0) { cout << "Isi elemen : " << jalan->data << endl;cout << "Isi elemen : " << jalan->data << endl; ...???...???} }
1A 2 0
1A 2 0
jalan
1A 2 0
jalan Output :Output :Isi elemen : 1Isi elemen : 1
![Page 16: Pointer](https://reader036.vdokumen.com/reader036/viewer/2022062517/568139e7550346895da19f4f/html5/thumbnails/16.jpg)
Bagaimana mengetahui isi list? (2)Bagaimana mengetahui isi list? (2)
Asumsi :Asumsi :
Node *jalan = A;Node *jalan = A;
while(jalan != 0) {while(jalan != 0) { cout << "Isi elemen : " << jalan->data << endl;cout << "Isi elemen : " << jalan->data << endl; jalan = jalan->berikut;jalan = jalan->berikut;} }
1A 2 0
1A 2 0
jalan
1A 2 0
jalan Output :Output :Isi elemen : 1Isi elemen : 1Isi elemen : 2Isi elemen : 2
*
jalan
![Page 17: Pointer](https://reader036.vdokumen.com/reader036/viewer/2022062517/568139e7550346895da19f4f/html5/thumbnails/17.jpg)
Bagaimana mengetahui isi list? (3)Bagaimana mengetahui isi list? (3)
Asumsi :Asumsi :
Node *jalan = A;Node *jalan = A;
while(jalan != 0) {while(jalan != 0) { cout << "Isi elemen : " << jalan->data << endl;cout << "Isi elemen : " << jalan->data << endl; jalan = jalan->berikut;jalan = jalan->berikut;} }
1A 2 ?
1A 2 ?
jalan
1A 2 ?
jalan Output :Output :Isi elemen : 1Isi elemen : 1Isi elemen : 2Isi elemen : 2 Stop !!!Stop !!!
* *
?
![Page 18: Pointer](https://reader036.vdokumen.com/reader036/viewer/2022062517/568139e7550346895da19f4f/html5/thumbnails/18.jpg)
Menghapus elemen pertama (1)Menghapus elemen pertama (1)
Asumsi :Asumsi : Node *hapus = new Node;Node *hapus = new Node;
hapus = A;hapus = A;
1A 2 ?
1A 2 ?
hapus
1
1
![Page 19: Pointer](https://reader036.vdokumen.com/reader036/viewer/2022062517/568139e7550346895da19f4f/html5/thumbnails/19.jpg)
Menghapus elemen pertama (2)Menghapus elemen pertama (2)
Asumsi :Asumsi : Node *hapus = new Node;Node *hapus = new Node;
hapus = A;hapus = A;
A = A->berikut;A = A->berikut;
1A 2 ?
1
A
2 ?
hapus
1
2
1
2
![Page 20: Pointer](https://reader036.vdokumen.com/reader036/viewer/2022062517/568139e7550346895da19f4f/html5/thumbnails/20.jpg)
Menghapus elemen pertama (3)Menghapus elemen pertama (3)
Asumsi :Asumsi : Node *hapus = new Node;Node *hapus = new Node;
hapus = A;hapus = A;
A = A->berikut;A = A->berikut;
delete hapus;delete hapus;
1A 2 ?
1
A
2 ?
hapus
1
2
1
2
3
3
![Page 21: Pointer](https://reader036.vdokumen.com/reader036/viewer/2022062517/568139e7550346895da19f4f/html5/thumbnails/21.jpg)
Menghapus elemen terakhir (1)Menghapus elemen terakhir (1)
Asumsi :Asumsi : Node *hapus = new Node;Node *hapus = new Node;
hapus = A->berikut; hapus = A->berikut;
1A 2 ?
1A 2 ?
hapus
1
1
![Page 22: Pointer](https://reader036.vdokumen.com/reader036/viewer/2022062517/568139e7550346895da19f4f/html5/thumbnails/22.jpg)
Menghapus elemen terakhir (2)Menghapus elemen terakhir (2)
Asumsi :Asumsi : Node *hapus = new Node;Node *hapus = new Node;
hapus = A->berikut; hapus = A->berikut;
delete hapus;delete hapus;1A 2 ?
1A 2 ?
hapus
1
1
2
2
![Page 23: Pointer](https://reader036.vdokumen.com/reader036/viewer/2022062517/568139e7550346895da19f4f/html5/thumbnails/23.jpg)
Menghapus elemen terakhir (3)Menghapus elemen terakhir (3)
Asumsi :Asumsi : Node *hapus = new Node;Node *hapus = new Node;
hapus = A->berikut; hapus = A->berikut;
delete hapus;delete hapus;
A->berikut = 0; A->berikut = 0; 1A 2 ?
1 0A 2 ?
hapus
1
1
2
2
3
3
![Page 24: Pointer](https://reader036.vdokumen.com/reader036/viewer/2022062517/568139e7550346895da19f4f/html5/thumbnails/24.jpg)
Buatlah algoritma untuk menyalin Buatlah algoritma untuk menyalin seluruh elemen sebuah link list.seluruh elemen sebuah link list.
Buatlah algoritma untuk menyalin Buatlah algoritma untuk menyalin seluruh elemen sebuah link list yang seluruh elemen sebuah link list yang genap.genap.
Buatlah algoritma untuk menghapus Buatlah algoritma untuk menghapus seluruh elemen sebuah link list yang seluruh elemen sebuah link list yang genap.genap.