Pointer adalah sebuah tipe data yang mencatat alamat sebuah memori, atau
bisa disebut juga sebagai penunjuk/pencatat alamat memori.
- Deklarasi suatu pointer menggunakan notasi* dibelakang tipe.
tipe* namaPointer;
contoh : int* p;
operasi
awalan& didepan suatu variabel digunakan untuk mengambil alamat dari suatu
variabel.
int* p;p = &x //artinya pointer mencatat alamat x.main(){int n=33;cout<<"n = "<<n<<endl; \\ isi dari ncout<<"&n = "<<&n<<endl; \\ alamat dari n}
- Referensi
tipe& alias = var;
contoh : int& m=n;
main(){int n=3;int& r=n;cout<<"n = "<<n<<" ,r = "<<r<<endl; //n=3 r=3--n; //n=n-1cout<<"n = "<<n<<" ,r = "<<r<<endl; //n=2 r=2r*=2; //r=r*2 = 4cout<<"n = "<<n<<" ,r = "<<r<<endl; //n=4 r=4cout<<"&n = "<<&n<<" ,&r = "<<&r<<endl; //alamat dari n, alamat dari r, alamat dari n=r}
Analisis hasilnya
Gambar 1. Hasil ke-1
- Pointer To Integer
Alamat dari suatu
variabel bertipe integer bisa dicatat oleh suatu pointer.
Gambar 2. Pointer To Integer
Gambar diatas
menunjukan bahwa sebuah lokasi dengan nama n yang isinya bernilai 5 dengan tipe
integer dicatat alamatnya oleh sebuah pointer p. Pointer p sendiri menempati
lokasi memori dengan alamat F005h dengan isi yang dicatatnya adalah F001h
(alamat dari n).
Pedeklarasian
keadaan pointer diatas adalah sebagai berikut :
main(){int n=5;int* p= &n;cout<<"n = "<<n<<",&n = "<<&n<<endl; //5, F001hcout<<"p = "<<p<<",&p = "<<&p<<endl; //F001h, F005h}
Untuk mengakses
nilai dari variabel yang ditunjuk oleh integer dengan menggunakan operator * (bintang asterik) didepan variabel
pointer.
Contoh nilai
variabel yang ditunjuk pointer
main(){int n=5;int* p= &n;cout<<"*p = "<<*p<<endl; //5}
Contoh nilai
referensi dari variabel yang ditunjuk pointer
main(){int n=5;int* p= &n;int& r= *p;cout<<"r = "<<r<<endl; //5}
- Operator New
Ketika pointer
sudah dideklarasikan seperti berikut :
float* p;
maka pernyataan
diatas hanya mengalokasikan memori untuk pointer itu sendiri. Nilai dari
pointer nantinya berupa alamat memori, tetapi memori pada alamat yang akan
dicatat oleh suatu pointer belum
dialokasikan.
Perhatikan
deklarasi kasus dibawah ini, p belum
diimisalisasikan (belum mengalokasikan memori). Usaha untuk mengakses p mungkin akan mengalami error.
*p=3.1415 //ERROR : karena
tidak ada alokasi memori untuk *p.
Jalan terbaik
mencegah masalah ini adalah menginisialisasikan pointer ketika dideklarasikan :
Cara 1 (mencatat lokasi yang sudah ada nama dan pemiliknya)
float x =3.1415; //x berisi nilai 3.1415float* p = &x; // p berisi alamat dari xcout<<”p = “<<*p<<endl;
dalam kasus ini,
mengakses *p tidak akan bermasalah
karena memori yang digunakan untuk menyimpan float 3.1415 sudah otomatis
dialokasikan ketika x
dideklarasikan. p menunjuk pada
alokasi memori yang sama.
Cara 2 (mencatat lokasi yang dialokasikan sesuai kebutuhan atau ketika diperlukan)
a). float* p;
b). p = new float; // alokasi
memori untuk 1 data float yang langsung dicatat oleh p
c). *p = 3.1415
Operator new mengembalikan alamat dari blok
memori yang belum digunakan yang besarnya float (4 byte). Ini menjamin bahwa *p tidak digunakan oleh variabel lain.
Gambar 3 operasi new
- Operasi Pointer
Operasi yang umum
dilakukan terhadap pointer adalah operasi Assignment. Misalkan ada 2 pointer p dan q, lalu dilakukan operasi assignment sebagai berikut
p=q;
Artinya p akan mencatat alamat yang sama dengan
dicatat oleh q;
Gambaran keadaan
pointer adalah sebagai berikut :
Gambar 4. Operasi Pointer p=q
- Dealokasi
Jika suatu tempat
yang dicatat oleh suatu pointer ingin dibebaskan maka harusalah dilakukan
proses dealokasi dengan tujuan lokasi tersebut bisa ditempati oleh data jenis
lain. Perintah yang digunakan adalah :
delete(p)
terlihat bahwa
dengan bentuk pengelolaan seperti ini maka dilakukan pengelolaan memori secara
dinamis yang artinya tidak perlu mengalokasikan memori lebih awal terlebih
dahulu secara tetap (fixed). Jika diperlukan
maka bisa dilakukan alokasi dan jika sudah tidak diperlukan maka lokasi memori
tersebut bisa dilakukan dealokasi.
- Pointer to Record
Pointer juga bisa
digunakan untuk mencatat alamat dari suatu record/structure.
Caranya :
Buat tipe nama record/structure
Buat nama alias tipe pointer yang menunjukan ke tipe nama record
Deklarasikan variabel – variabel yang mengacu pada alias tipe pointer
tersebut.
Gambar 5. Pointer to Record
Cara
mendeklarasikan pointer to record di
atas adalah :
struct mahasiswa{char NPM[8];char nama[20];int nilai;};typedef mahasiswa* pointer; //pointer menujuk addres record mahasiswa.main(){pointer p,q; //p,q : pointer to record/p= new mahasiswa; //alokasi melalui p.cin>>p->NPM;cin>>p->nama;cin>>p->nilai;q= new mahasiswa; //alokasi melalui q.cin>>q->NPM;cin>>q->nama;cin>>q->nilai;cout<<p->NPM<<p->nama<<p->nilai<<endl;cout<<q->NPM<<q->nama<<q->nilai<<endl;}
Pengaksesan
atribut suatu record melalui suatu pointer menggunakan operator”->”.
Contoh :
p->NPM;
Operasi
Assignment pada pointer to record juga sama seperti pada pointer to integer.
pencarian terkait
#pointer #operasi_new #pointer_to_integer #pointer_to_record
#pointer #operasi_new #pointer_to_integer #pointer_to_record
Posting Komentar untuk "Pointer (Pada C++)"
Berilah komentar, saran, dan kritik dengan bijak