382 likes | 697 Views
POINTER. Latifah rifani. MATERI 4. POINTER MERUPAKAN SEBUAH VARIABEL BIASA YANG TIDAK BIASA…… MENGAPA????. PENGERTIAN. Suatu variabel yang berisi alamat memori sebagai nilainya .
E N D
POINTER Latifahrifani MATERI 4
POINTER MERUPAKAN SEBUAH VARIABEL BIASA YANG TIDAK BIASA…… MENGAPA????
PENGERTIAN • Suatuvariabel yang berisialamatmemorisebagainilainya. • Merupakanvariabel level rendah yang dapatdigunakanuntukmenunjuknilai integer, character, float, double, atau single dantipe-tipe data lain yang didukungolehbahasapemrograman.
Bersifatdinamisdanlebihfleksibel. • Variabel pointer yang tidakmenunjukpadanilaiapapunberartimemilikinilaiNULL, disebutsebagaidangling pointerkarenanilainyatidakdiinisialisasidantidakdapatdiprediksi.
Variabel pointer berisialamatdarisuatuobyek lain. • Sebagaicontoh, pxadalahvariabel pointer danx adalahvariabel yang ditunjukolehpx. Kalaux beradapadaalamatmemori (alamatawal) 100, makapxakanberisi100.
Misalnya: • Apabilakitamembuat program yang akanmenampilkansuatunilai di dalamsuatuvariabeltertentudanmenampilkanjugaalamatsuatu pointer yang isinyasamadengan yang ditunjukolehvariabeltadi.
Makadalam program kitatuliskan (C++): { int v = 7, *ptr; ptr = &v; cout << “Nilai v = << v << “ dan *ptr = “<< *p << “\n alamatnya = “<< p << ‘\n’; }
Bila program di atasdijalankan, makahasilnyaadalah: Nilai v = 7 dan *ptr = 7 Alamatnya = efffb24
BANDINGKAN!!! int x = 7 ; DAN int *u;
FUNGSI POINTER • Meningkatkankinerjauntukoperasi yang dilakukansecaraberulang, karenavariabel pointer bersifatdinamis (dapatdiubah-ubahlokasipenyimpannyadalam memory). • Padavariabelbiasakitatidakperlutahualamat memory darivariabeltersebut. Untukmengakseshanyaperlunamavariabeltersebut. Tapiuntukstruktur data dinamis (linked list, tree dsb) haltersebuttidakbisa.
Penggunaan pointer yang tepatdapatmempercepatsebuahprosessecarasignifikan. • Pemindahan data yang besardarisebuahvariabel.
OPERATOR ALAMAT • Setiapvariabel yang dideklarasikan, disimpandalamsebuahlokasimemoridanpenggunabiasanyatidakmengetahui di alamatmana data tersebutdisimpan. • Dilambangkandengansimbol“&”.
Contoh: int y = 5; int *yPtr; Makapernyataan: yPtr = &y • Iniberartibahwaalamatdarivariabel y ditunjukkankepadavariabel pointer yPtr.
OPERATOR REFERENCE • Penggunaan operator ini, berartimengaksesnilaisebuahalamat yang ditunjukolehvariabel pointer
DEKLARASI VARIABEL POINTER • Contoh: • Char *data1 • Int *data2 Tipe * nama_pointer
Operasivariabel pointer dapatdikerjakanolehvariabel pointer yang lain. • Contoh: Nilai1 = 8 Ptr1 = &Nilai; Ptr2 = Ptr1; • Maka Ptr1 danPtrmenghasilkanalamatvariabel nilai1 yang sama.
int *alamat; intnilai = 10; alamat = &nilai; printf (“%d”, *alamat); int *nilai; int data = 10; alamat = &data; printf (“%d”, alamat); DENGAN
DEREFERENCING POINTER • Adalahmengambilnilai yang ditunjukolehsebuahvariabel pointer . • Untukmelakukan dereferencing pointer, kitaharusmenggunakansimbol*. Bila p adalah pointer, makap* adalahnilai yang ditunjukolehp. • Dalamdelphibiasanyaditunjukolehsimbol ^
OPERASI POINTER • OperasiPenugasan • OperasiAritmatika • OperasiLogika
OPERASI PENUGASAN • Nilaidarisuatuvariabel pointer dapatdisalinkevariabel pointer yang lain. • Contoh: y = 65; x1 = &y; X2 = x1;
OPERASI ARITMATIKA • Suatuvariabel pointer hanyadapatdilakukanoperasiaritmatikadengannilai integer saja. • Operasipenambahandengansuatunilaimenunjukkanlokasi data berikutnya (index selanjutnya) dalammemori.
Hanya 4 operator aritmatikadapatdigunakanpada pointer, yaitu ++, ==, +, dan -. • Operasi yang biasadilakukanadalahoperasipenambahandanpengurangan.
Contoh: { int i[4], *i_Ptr; int x; i_Ptr = i; for (x = 0; x<4; x++) cout << i_Ptr+x <<“\n”; return 0; }
Apabila program di atas di jalankan, makaakanmuncul: 0xeffffd9c 0xeffffda0 0xeffffda4 0xeffffda8
OPERASI LOGIKA • Ataudisebutoperasiperbandingan. • Pointer dapatdibandingkandenganmenggunakan operator hubungan, seperti !=, ==, <, dan >. • Contoh: { int num[4]; int *start, *end; start = num; end = &num[3]; while (start != end) }
POINTER DAN ARRAY • Array secara internal akanditerjemahkandalambentuk pointer. • Deklarasivariabel: inttgl_lahir[3] = { 01, 09, 64 }; int*ptgl; • Kemudiandiberiinstruksi: ptgl= &tgl_lahir[0]; makaptglakanberisialamatdarielemenarray tgl_lahir yang berindeksnol.
Instruksi di atasbisajugaditulismenjadi: ptgl= tgl_lahir; • Namaarray tanpatandakurungmenyatakanalamatawaldari array.
Contohdalam program C++ #include <stdio.h> main() { static inttgl_lahir[] = {16, 4, 1974}; inti, *ptgl; ptgl= tgl_lahir; printf("Nilai yang ditunjukptgl = %d\n", *ptgl); for (i=0; i<3; i++) printf("Nilaitgl_lahir[i] = %d\n", *ptgl++); }
POINTER DAN STRING • Pointer jugadapatdigunakanuntukmendeklarasikanvariabel string. • Contoh: • char *pkota = “SEMARANG”; • Hampirsamadengan: • char kota[] = “SEMARANG”; • Tetapisebenarnyatidaktepatsama. • pkotaadalah pointer (menyatakanalamat) yang menunjuk • kestring “SEMARANG”, kotaadalah array (array • menyatakanalamat yang konstan, takdapatdiubah).
CONTOH SOAL 1 int a = 5; int *ptr = NULL; ptr = &a; *ptr = 8; Hasilnya?? Hasilnya??
CONTOH SOAL 2 int a = 5; char b = 10; int *ptr = NULL; ptr = &a; ptr = &b; *ptr a = 8; *ptr b = 12; *ptr a = ?? Hasilnya?? Hasilnya?? Hasilnya?? Hasilnya?? Hasilnya??
CONTOH SOAL 3 int x = 10, y = 8, *a, *b; a = &x; b = &y; printf (“Nilai yang ditunjuk a = %d beradapadaalamat %p\n”, *a, a); printf (“Nilai yang ditunjuk b = %d beradapadaalamat %p\n”, *b, b); *b = *a printf (“Nilai yang ditunjuk a = %d beradapadaalamat %p\n”, *a, a); printf (“Nilai yang ditunjuk b = %d beradapadaalamat %p\n”, *b, b);