Pointer
Pengertian
Pointer
Dalam ilmu komputer, pointer adalah
tipe data bahasa pemrograman yang nilainya mengacu untuk menunjuk langsung
nilai lain yang tersimpan di tempat lain dalam suatu memori komputer
menggunakan alamat yang ada. Untuk bahasa pemrograman tingkat tinggi, pointer
secara efektif dapat mengambil tempat pada general purpose registers di bahasa
tingkat rendah seperti bahasa assembly atau kode mesin, tetapi bila memori
tersedia.
Pointer adalah implementasi
sederhana, lebih konkret tentang tipe data referensi yang lebih abstrak.
Beberapa bahasa mendukung beberapa jenis pointer, walaupun ada yang memiliki
lebih banyak pembatasan penggunaannya dari pada yang lain. Sebagai analogi,
sebuah nomor halaman dalam buku dapat dianggap sebagai pointer ke halaman yang
sesuai; dereferencing seperti pointer akan dilakukan dengan membalik ke halaman
dengan nomor halaman yang diberikan.
Pointer dapat meningkatkan kinerja
data secara signifikan agar operasi berulang seperti traversing string, tabel
lookup, tabel kontrol dan struktur pohon. Secara khusus, sering jauh lebih
efisien dalam waktu dan space untuk pointer dari pada menggunakan variable tipe
data biasa.
Pointer juga digunakan untuk
menyimpan alamat dari titik masuk untuk memanggil subrutin dalam pemrograman
prosedural dan untuk run-time penghubung ke dynamic link libraries (DLL). Dalam
pemrograman berorientasi objek, pointer ke fungsi yang digunakan untuk
mengikat/menjilid method, ini sering disebut tabel method virtual.
Sementara "pointer" telah
digunakan untuk merujuk pada referensi yang ada pada umumnya, hal ini berlaku
lebih baik bagi struktur data yang secara eksplisit memungkinkan antarmuka
(interface) pointer untuk dimanipulasi (secara aritmetik melalui aritmetik pointer)
sebagai alamat memori. Karena pointer memungkinkan akses yang baik dilindungi
maupun tidak dilindungi ke memori yang dituju.
Pointer primitif adalah pointer
sering disimpan dalam format yang sama dengan integer. Namun, mencoba untuk
dereference atau "mencari" pointer yang nilainya tidak pernah menjadi
alamat memori yang valid akan menyebabkan program menjadi crash.
Deskripsi Formal:
Dalam ilmu komputer, pointer adalah
macam referensi. Sebuah data primitive (primitive) adalah setiap datum yang dapat
dibaca dari atau ditulis ke memori komputer menggunakan satu akses
memori (misalnya, kedua byte dan kata (word) yang primitif).
Sebuah data agregat (aggregate)
adalah sekelompok data primitif yang logis berdekatan di memori dan yang
dipandang secara kolektif sebagai satu datum (misalnya, agregat bisa saja 3
byte logis berdekatan, maka nilai-nilai itu lah yang mewakili 3 koordinat titik
di dalam ruang memori), ketika seluruh agregat yang terdiri dari jenis
primitive yang sama, agregat dapat disebut sabagai sebuah array, dalam arti,
multi-byte primitif adalah array dari byte.
Kegunaan Pointer
Alasan mengapa harus menggunakan pointer yang utama adalah untuk menyimpan
alamat memori dari sebuah variabel (data type atau object dari class). Selain
menyimpan alamat dari variabel, pointer juga dapat digunakan untuk menyimpan alamat
dari sebuah fungsi (function pointer).Function pointer telah digunakan sejak dikenalkannya bahasa C,dan banyak digunakan untuk sebuah fungsi callback atau untuk meningkatkan readability dari sebuah code
Anda dapat memperlakukan function pointer seperti pointer biasa (pointer ke datatype/object), anda dapat menyimpan,mengirimkan, merubah address, atau meng-evaluasi address dari pointer ke fungsi ini dengan sifat tambahan anda dapat memanggil fungsi yang ditunjuk oleh function pointer.
Atau bisa juga pointer berguna untuk :
1. Mengirimkan “Parameter yang berupa variabel” ke dalam fungsi, artinya nilai
variabel bisa diubah di dalam fungsi
2. Untuk membuat variabel DINAMIS (Bukan variabel Statis)
penggunaan function pointer pada C++ dibatasi, yaitu function pointer tidak boleh menunjuk pada function yang berada dalam sebuah class (class member function) kecuali function tersebut berjenis static.
Operator yang digunakan untuk pointer adalah tanda “*” dan tanda “&”.
tanda “*” ini berfungsi sebagai penunjuk nilai dari suatu pointer sedangkan tanda
“&” digunakan sebagai penunjuk alamat dari suatu variable.
Pointer di gunakan untuk mengalokasikan tempat pada memori secara dinamis yakni dapat diubah-ubah alokasi tempatnnya pada memori.
data yang dimasukkan sebagai nilai pointer akan selalu tersimpan sehingga diperlukan penghapusan yang tujuannya untuk mengosongkan memori, perintah yang digunakan untuk menghapus memori adalah delete nama variable.
*Operasi pointer dapat diterapkan pada tipe data Array,tipe data Struck,
*Pointer dapat digunakan untuk mengakses elemen array
*Pointer dapat menunjuk alamat pointer lain.
Bentuk Penulisannya:
Pointer merupakan sebuah variabel
yang berisi alamat variabel lain. Pointer ini dimaksudkan untuk menunjukkan
suatu alamat memori sehingga alamat dari suatu variabel dapat diketahui dengan
mudah.
Operator Pointer dibagi menjadi 2 macam yaitu :
1.Operator Dereference(&)
2.Operator reference(*)
- Operator Dereference
Operator Dereference disimbolkan dengan simbol "&" (ampersand
sign).Operator dereference ini digunakan untuk mengetahui suatu alamat lokasi
memori yang sedang digunakan.Biasanya operator ini disebut juga dengan "address
of" atau operator alamat.
Biasanya alamat memori disetiap komputer berbeda tapi, ada pula yang sama.Bila
alamat yang dicari lebih dari satu maka alamat antara satu dengan yang lainnya
berbeda. Contoh listing program penggunaan operator dereference:
#include<stdio.h>
#include<conio.h>
#include<iostream.h>
main( )
{
int ilham,amir,*raka;
clrscr( );
ilham=75;
amir=ilham;//nilai amir sama dengan ilham
raka=&ilham;
cout<<"Nilai ILHAM="<<ilham<<endl;
cout<<"Nilai AMIR="<<amir<<endl;
cout<<"Nilai RAKA="<<raka<<endl;
getch( );
}
Keterangan: *raka : raka diberi tanda bintang karena raka belum memiliki nilai.
Hasil Output:
#include<conio.h>
#include<iostream.h>
main( )
{
int ilham,amir,*raka;
clrscr( );
ilham=75;
amir=ilham;//nilai amir sama dengan ilham
raka=&ilham;
cout<<"Nilai ILHAM="<<ilham<<endl;
cout<<"Nilai AMIR="<<amir<<endl;
cout<<"Nilai RAKA="<<raka<<endl;
getch( );
}
Keterangan: *raka : raka diberi tanda bintang karena raka belum memiliki nilai.
Hasil Output:
Dari hasil tersebut dapat diketahui bahwa Alamat Raka=0x0012ff50.
- Operator Reference
Operator reference ditandai dengan simbol (*)<identifier asterisk>.
Operator ini digunakan untuk mencari nilai sebenarnya dari suatu variabel yang
berada didalam pada suatu alamat memori.Operator ini biasa disebut dengan
"value pointed by".
Contoh listing program penggunaan Operator Reference :
#include<stdio.h>
#include<conio.h>
#include<iostream.h>
main( )
{
int ilham,*raka,rafli;
clrscr( );
ilham=75;
raka=&ilham;
rafli=*raka;
cout<<"Nilai ILHAM="<<ilham<<endl;
cout<<"Nilai RAKA="<<raka<<endl;
cout<<"Nilai RAFLI="<<rafli<<endl;
getch( );
}
Hasil Output :
Dari hasil tersebut diketahui bahwa nilai rafli=75.
=> Deklarasi Pointer Pada Konstanta
Suatu pointer dapat dideklarasika secara konstanta/tetap tidak dapat
diubah.Untuk mendeklarasikan pointer pada konstanta dengan memberikan kata
const didepan nama konstanta.
Bentuk Penulisan: tipe_data * const nama_konstanta;
Contoh listing program pointer pada konstanta:
#include<stdio.h>
#include<conio.h>
#include<iostream.h>
void main( )
{
char *const nama = "Borland C++";
clrscr( );
cout<<"Nama Program="<<nama<<endl;
//nama="Visual C++"; apabila diberi nama baru ini maka programnya tidak akan jalan karena sudah ada variabel nama"Borland C++".karena variabel nama ini merupakan pointer konstanta yaitu tidak dapat diubah-ubah.
cout<<"Nama Program="<<nama<<endl;
getch( );
}
Hasil Output:
Contoh listing program pointer pada konstanta:
#include<stdio.h>
#include<conio.h>
#include<iostream.h>
void main( )
{
char *const nama = "Borland C++";
clrscr( );
cout<<"Nama Program="<<nama<<endl;
//nama="Visual C++"; apabila diberi nama baru ini maka programnya tidak akan jalan karena sudah ada variabel nama"Borland C++".karena variabel nama ini merupakan pointer konstanta yaitu tidak dapat diubah-ubah.
cout<<"Nama Program="<<nama<<endl;
getch( );
}
Hasil Output:
=> Deklarasi Pointer Pada Variabel
Untuk menunjuk secara langsung kesuatu nilai,memeriksa satu persatu data yang
memiliki pointer pada saat variabel tersebut pertama dideklarasikan.
Bentuk penulisan : tipe_data *nama_variabel;
Contoh programnya sama dengan listing program penggunaan dereference dan reference,yaitu *raka(nama variabel).
=> Pointer Pada Pointer
Contoh programnya sama dengan listing program penggunaan dereference dan reference,yaitu *raka(nama variabel).
=> Pointer Pada Pointer
Merupakan pointer yang dapat menunjuk pointer lainnya.Di
dalam pendeklarasiannya ,hanya menambahkan pointer reference (*) pada variabel
yang akan ditunjuk.
Contoh listing program Pointer Pada Pointer :
#include<stdio.h>
#include<conio.h>
#include<iostream.h>
main( )
{
int ilham;
int *raka;//pointer ke variabel
int **amir;//pointer ke variabel
clrscr( );
ilham=75;
cout<<"Nilai ILHAM="<<ilham<<endl;
//penugasan ke alamat memori
raka=&ilham;
amir=&raka;
cout<<"Nilai RAKA Hasil Mengakses ILHAM=";
cout<<*raka<<endl;
cout<<"Nilai AMIR Hasil Mengakses ILHAM=";
cout<<**amir<<endl;
getch( );
}
Hasil running :
=>Pointer Pada Array
Secara internal array juga menyatakan alamat,yaitu pengenal array sama dengan
alamat pada elemen pertama,pada array.
Contoh listing program pointer pada array :
#include<stdio.h>
#include<conio.h>
#include<iostream.h>
main( )
{
int i;
int nilai[5];
int *ptrnilai;
ptrnilai=nilai;
for(i=1;i<=5;i++)
{
cout<<"Masukan Nilai Pertama=";
cin>>nilai[i];
}
cout<<endl;
cout<<"Hasil Pengaksesan Elemen Array Lewat";
cout<<"Pointer";
cout<<endl<<endl;
for(i=1;i<=5;i++)
{
cout<<"Elemen"<<i<<".Nilai"<<nilai[i];
cout<<",Menempati Alamat Memori=";
cout<<&ptrnilai[i];
cout<<endl;
}
getche( );
}
Hasil output :
#include<stdio.h>
#include<conio.h>
#include<iostream.h>
main( )
{
int i;
int nilai[5];
int *ptrnilai;
ptrnilai=nilai;
for(i=1;i<=5;i++)
{
cout<<"Masukan Nilai Pertama=";
cin>>nilai[i];
}
cout<<endl;
cout<<"Hasil Pengaksesan Elemen Array Lewat";
cout<<"Pointer";
cout<<endl<<endl;
for(i=1;i<=5;i++)
{
cout<<"Elemen"<<i<<".Nilai"<<nilai[i];
cout<<",Menempati Alamat Memori=";
cout<<&ptrnilai[i];
cout<<endl;
}
getche( );
}
Hasil output :
=>
Pointer Pada String
Merupakan pointer yang menunjuk pada sebuah string.
Contoh listing program pointer pada string :
Merupakan pointer yang menunjuk pada sebuah string.
Contoh listing program pointer pada string :
#include<constrea.h>
//conio.h ; iostream.h
main( )
{
char band_metal[ ]="SEPULTURA";
char *band_punk="RANCID";
cout<<"Nama Band Metal="<<band_metal<<endl;
cout<<"Nama Band Punk="<<band_punk<<endl;
band_punk+=4;//menambah nilai petunjuk/pointer
cout<<"Nama Band Metal="<<band_metal<<endl;
cout<<"Nama Band Punk="<<band_punk;
getch( );
}
main( )
{
char band_metal[ ]="SEPULTURA";
char *band_punk="RANCID";
cout<<"Nama Band Metal="<<band_metal<<endl;
cout<<"Nama Band Punk="<<band_punk<<endl;
band_punk+=4;//menambah nilai petunjuk/pointer
cout<<"Nama Band Metal="<<band_metal<<endl;
cout<<"Nama Band Punk="<<band_punk;
getch( );
}
Hasil Output :
Dari outputan di atas,terdapat
perubahan nilai pointer pada band punk,yang ditunjukkan oleh penambahan nilai
pointer pada band_punk +=4,secara default, pembacaan dilakukan mulai dari
pointer pertama, karena sudah terjadi penambahan dengan 4, maka pembacaan
berpindah ke alamat ke.5, sehingga tercetak kata ID.
Pembacaan: R A N C I D
1 2 3 4 5 6
^
ID
ID
Contoh
Program sederhana Pointer
#include<constream.h>
void main()
{
clrscr();
char *nama = "UNIVERSITAS";
char cari = 'S', tmp;
cout<<"Kata = "<<nama;
cout<<"\nHuruf yang dicari adalah = "<<cari<<endl<<endl;
for(int i=0; i<11; i++){
if(nama[i]==cari)
tmp=nama[i];
//cout<<nama[i]<<" TRUE\n";
//else cout<<nama[i]<<" FALSE\n";
}
if(tmp==cari)
cout<<"Huruf Ditemukan";
else
cout<<"Huruf tidak Ditemukan";
getch();
}
Komentar
Posting Komentar