Pointer

24

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 Presentation

Transcript of Pointer

Page 1: Pointer
Page 2: Pointer

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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.