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:

https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEixNuG-cNDfP0TPRhYUoMdXJwM8IrIjwRpbskU1Ry5Fij_PQ9QS7Jfurbw17lbOQp5zCpyi2xVFcHAN5szMbuqHbfkbp5kSUOfoXUYJmDYjsj56pcpCRbmGqdgS_KleEYjK7aKQrjzyCwg/s400/run+%2526+cpp.png

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 :
https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgvHS6SQZwUFbLQ6puUe8Ajxmuik9iCqQpIDacQZFJ6kCpQ3Jeets5rMPkzT4Lhyphenhyphenb3U7HN3sKP14xXoSzpyzhrhvC0cIgoAExvAY6rW7GMU77RSyjfjFAtAa65CZtfYwOiaQ1aAMBMoJNk/s400/run+Bin.dib

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:
https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEgdpMs8uUzXDSNpCWo9pcMOpVj2RBjghItkq8d2-rMdMgIp_g0WmzJMWtgc6C-gmV6vlq6YZJJQLb5rxz9W5b369dHaqBhVyZh14fIOyJGb83mgUj9oAAIucmSWEC0qM4CO2-LSAlZcr9M/s400/run+konst.png

=> 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
            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 :

https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEg_U2GC-jq7otR5qGcL8Pbf2im3TPPG5IeVg9RZtHu128wGy-cBRlM-rfgLLLJOqOuSlDDWfbCt6vUm624GjmWtQ56i1JV9FeL8xkJk_THToVl6rKx5CPYT3TBCTMba34FLrBx4MKqHJq8/s400/p2p.png

=>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 :



=> 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( );
}
 
Hasil Output :

https://blogger.googleusercontent.com/img/b/R29vZ2xl/AVvXsEhbEtRpu208bqqCUEsEwjQFczk3AHwt4GfL6PWtyd81Lo16XEXjiSasLMTueRD4V7YC-y5jKg49aa4_uoO3uRvFmueKEHpF8CNRUmluGOnRMaiqk5MUUpSORZv-0yLB8m7B6fwhqZdb-XU/s1600/ppstr.png

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
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

Postingan populer dari blog ini

Use of Preposition & Common Combination and Preposition

PARTS AND STYLES OF BUSINESS LETTERS

ME, NITA WULAN-18thn