pointer
Post on 05-Jan-2016
58 Views
Preview:
DESCRIPTION
TRANSCRIPT
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
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
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];];
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
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;
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
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
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
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)
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
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();
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;
}}
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
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
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
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 !!!
* *
?
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
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
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
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
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
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
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.
top related