Misal :
Ada suatu variable A berisi alamat dari variable B, maka variable A
dapat dikatakan menunjuk variable B.
OPERATOR POINTER
Menunjukkan
nilai pada suatu
alamat
& *
Menunjukkan
alamat dalam
suatu memori
Hmmm …
Apa bedanya pointer dengan variable biasa??
Pointer Variabel Biasa
Deklarasi Variabel Int *a; Int b;
Alamat Memori Tidak Otomatis Otomatis
Mengetahui alamat memori a &b
Mengetahui data atau *a b
nilainya
Mengapa pakai pointer?? Alamat itu
dinamis
Perhatikan ilustrasi dibawah ini :
a=5
Alamat 1 Alamat 2 Alamat 3 Alamat 4 Alamat 5 Alamat n
Misal
a=5 b
Alamat 1 Alamat 2 Alamat 3 Alamat 4 Alamat 5 Alamat n
Misal
Pada int main : Pada fungsi : Saat parameter a pada int main dikirim ke
fungsi maka variable b membutuhkan space
Int a = 5 ; Fungsi ( int b ) { baru untuk mealokasikan nilai yang
diterimanya dari int main.
Cout<< a <<endl; Cout<<b<<endl;
Fungsi(a); } Hal itu menjadi tidak efisien.
Gimana solusinya? Next --
Solusi : Kita ubah parameter masukan pada Alamat itu
fungsi menjadi variable pointer dinamis
a=5
Alamat 1 Alamat 2 Alamat 3 Alamat 4 Alamat 5 Alamat n
Misal
Jika menggunakan variable pointer pada
fungsi maka saat masukan a pada int main
berbentuk alamat yaitu dengan sintak &a
Pada int main : Pada fungsi : yang nantinya dikirim ke fungsi berupa
Int a = 5 ; Fungsi ( int *b ) { alamat.
Cout<< a <<endl; Cout<<b<<endl; Sehingga pada saat parameter diterima
Fungsi(&a); } oleh fungsi variable pointer b, maka pointer
b bisa mengakses nilai a dengan hanya
menunjuk alamat a.
Deklarasi Pointer
Sama seperti variable yang lain, variable pointer juga harus
dideklarasikan terlebih dahulu sebelum digunakan.
Contoh :
Int *nilai;
Char*huruf;
Cara untuk alokasi space memori bagi pointer .
Yaitu dengan menepati space variable lain yang sudah punya space.
Variabel lain dapat berupa variable biasa maupun pointer yang tentunya sudah punya alkasi space
memori.
=> alamat
1. p=&data 2. Output :
Artinya p menunjuk alamat Cout<<*p<<endl; //50
varibel data Maka p mengarah pada nilai alamat yang
ditunjuknya.
Dari slide sebelumnya, kita coba untuk mengganti nilai pada variable data
menggunakan pointer (*p=100; )
Kalau jawaban output kalian belum sesuai di pahami ulang lagi ya slide sebelumnya
Contoh salah dalam pemakaian pointer :
#include <iostream> using namespace std;
int main() {
double *p;
float q;
int r= 1234;
Sebab p adalah pointer double padahal r bertipe int
P= &q; ( SALAH )
int q = *p; ( SALAH )
cout << “r = " << r << endl;
cout << “q= " << q << endl;
}
POINTER ARITHMETIC
Ada 2 operator aritmatika , pertambahan dan pengurangan yang
memungkinkan di gunakan dalam pointer. Jadi ketika kita
menambahkan 1 ke sebuah pointer, maka kita sebenarnya
menambahkan size tipe datanya dalam bytes , diamana pointer itu
menunjuk.
Contoh : cout<<*x; cout<<endl; cout<<endl;
int y=100; cout<<endl; x++; cout<<*x;
int *x=&y; cout<<x; cout<<x;
Jika alamat dari x sebelumnya 100, lalu terdapat statement x++ maka
statement tersebut akan menambahkan x dengan 4 ( ukuran tipe data
int 4 bytes ).
Pointer to an Array
Dua struktur data yang saling berkaitan satu sama lain didalam C++, dan dapat saling
dipertukarkan penggunaannya. Hal ini karena suatu array dapat didefinisikan sebagai
pointer ke elemen pertama dari array tersebut.
Contoh :
Terdapat sebuah array simpan dari pointer sebanyak 7 buah data yang bertipe integer,
maka kita dapat tulis sebagai berikut :
Int *simpan[7];
Untuk menentukan alamat dari variabel integer disebut var ke elemen kempat dari
pointer array, dapat dituliskan sebagai berikut :
Int var;
Simpan[3]=&var;
Contoh :
#include <iostream> Output :
using namespace std;
main (){
int arr[5] ={1,2,3,4,5};
Jadi jika kita cout kan ptr saja maka
int *ptr=arr;
pointer ptr akan mengandung basis
cout<<"ptr = " <<ptr<<endl; alamat dari variable arr .
cout<<"ptr = " <<&ptr[0]<<endl; Dan jika kita cout kan &ptr[0] maka
} itu secara detail menunjuk basis
alamat dari variable arr.
Lanjutan contoh ……
Output :
#include <iostream>
using namespace std;
main (){
int arr[5] ={1,2,3,4,5};
int *ptr=arr;
cout<<"Alamat dari &ptr+2 = " <<&ptr+2<<endl;
cout<<"Nilai pada *ptr+2 = "<<*ptr+2;
}
Pointer to String
Output :
Contoh :
#include <iostream>
using namespace std;
main (){
char str[] ="computer";
char *cp=str;
Pointer cp menyimpan alamat dari variable str.
//using variabel name
Statement cout<<cp; akan mencetak
cout<<str<<endl; computer sebagai nilai dari alamat str.
//using pointer variabel
cout<<cp<<endl;
}
Contoh 2 : Output :
#include <iostream>
using namespace std;
main (){
char *kendaraan[]={"MOBIL","PESAWAT",
"MOTOR","KERETA","BUS"};
for (int i=0;i<5;i++)
cout<<kendaraan[i]<<endl; Array kendaraan[] adalah sebuah array yang
memiliki tipe char pointer. Kendaraan[0]
}
mengandung basis alamat dari string
“Car”,kendaraan[1] mengandung alamat dari
string “Pesawat”.
Double Pointer ( Pointer to Pointer **p )
Representasi double pointer : Dalam pointer to pointer terdapat hubungan
hieraki . Variabel Pointer to pointer tidak dapat
1. Int a = 50; langsung berhubungan dengan variable biasa
melainkan dijembatani oleh variable pointer
2. Int *p = &a dengan cara menunjuk alamat yang dituju secara
hierarki. Cermati representasi double pointer
3. Int **q =&p disamping!
**q *p a
50
Misal dari representasi sebelumnya kita beri alamat memori :
a *p **q
50 p=1000 q=2000
Variabel a merupkan variable Poiter p adalah pointer yang Poiter q adalah pointer yang
yang di simpan/dialokasikan mengandung alamat dari mengandung alamat dari
pada alamat 1000. variable a. variable p pointer..
a *p **q
50 p=1000 q=2000
Output :
Nilai dari **q = 50 Penjelasan **q :
Nilai dari *p = 50 - Pointer q akan memberi nilai pada lokasi alamat
Nilai dari a = 50 2000, yaitu 1000
- - poninter to pointer q akan memberi nilai pada lokasi
Nilai dari p = 1000 1000, yaitu 50.
Dikirim di spade dalam bentuk link drive. Tidak usah di zip atau rar.
Kerjakan sendiri ,jika ada pertanyaan silahkan tanyakan digroup .
Semangat
Jaga kesehatan
SELAMAT MENGERJAKAN