Merupakan sebuah variabel yang berisi alamat dari variabel lain. Suatu
pointer dimaksudkan untuk menunjukan ke suatu alamat memori sehingga alamat
dari suatu variabel dapat diketahui dengan mudah.
a. Operator Pointer
Terdapat dua macam operator pointer yang disediakanoleh Borland C++:
1. Operator dereference ( & )
2. Operator reference ( * )
1.) Operator Dereference ( & )
Didalam mendeklarasikan suatu variabel harus pada lokasi yang pasti didalam penggantian memori.Pada umumnya kita tidak dapat menentukan dimana variabel akan ditempatkan Terkadang secara otomatisdilakukan oleh kompiler dan sistem operasi yang sedang aktif, tetapi sesekali sistem operasi akan memberikan banyak alamat yang kita tidak mengetahui dimana variabel ditempatkan. Hal ini dapat dilakukan dengan memberikan suatu identifier “&” (ampersand sign) didepan nama variabel, operator ini biasa disebut dengan “address of” atau operator alamat. Dengan menggunakan operator dereference ( & ) ini, suatu variabel akan menghasilkan alamat lokasi memori.
Sebagai contoh ILHAM ditempatkan pada memori dengan alamat 0x0012ff88 dan dideklarasikan sebagai berikut:
ILHAM = 75;
AMIR = ILHAM; // AMIR sama dengan ILHAM (75)
RAKA = &ILHAM; // RAKA sama dengan Address Of ILHAM (0x0012ff88)
2.) Operator Reference ( * )
Dengan menggunakan operator anda dapat mengakses secara langsung nilai
yamg terdapat didalam variabel yang berpointer, hal ini dapat dilakukan dengan
menambahkan identifier asterisk ( * ), agar dapat menterjemahkan nilai sebenarnya
dari suatu variabel. Operator ini biasa disebut dengan “value pointed by”.
Dengan menggunakan operator reference ( * ) ini, menghasilkan nilai yang
berada pada suatu alamat memori
Sebagai contoh ILHAM ditempatkan pada memori denganalamat 65524 dan
dideklarasikan sebagai berikut:
ILHAM = 75;
RAKA = &ILHAM; // RAKA sama dengan Address Of ILHAM (0x0012ff88)
RAFLI = *RAKA; // RAFLI sama dengan value pointed by RAKA(75)
B. Deklarasi Pointer Pada Konstanta
Suatu pointer dapat dideklarasikan secara konstanta atau secara tetap tidak dapat diubah. Untuk mendeklarasikan pointer secara konstanta dengan memberikan kata const didepan nama konstanta.
Bentuk penulisan:
tipe_data * const nama_konstanta;
Contoh :
//----------------------------------//
//Pendeklarasian Pointer 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++";
cout<<"Nama Program = "<<nama<<endl;
getch( );
}
Pada program diatas, terdapat kesalahan dan tidak dapat dijalankan, penyebabnya pada pernyataan nama = "Borland C++";. Karena variabel nama, merupakan pointer konstanta, yaitu tidak dapat diubah-ubah. Pesan Kesalahan Yang Tampil adalah:
Cannot modify a const object
Error Message yang akan dihasilkan, dari program contoh-1 diatas adalah:
C. Deklarasi Pointer Pada Variabel
Karena keakhlian dari pointer untuk menunjuk secaralangsung kesuatu nilai, memeriksa satu persatu data yang memiliki pointer pada saat variabel tersebut pertama kali dideklarasikan.
Bentuk penulisan:
tipe_data *nama_variabel;
Contoh 1:
//-------------------------------//
//Penggunaan Pointer Dereference //
//-------------------------------//
#include<stdio.h>
#include<conio.h>
#include<iostream.h>
main( )
{
int ilham, amir, *raka;
clrscr( );
ilham = 75;
amir = ilham;
raka = &ilham;
cout<<"Nilai ILHAM = "<<ilham<<endl;
cout<<"Nilai AMIR = "<<amir<<endl;
cout<<"Nilai RAKA = "<<raka<<endl;
getch();
}
Contoh 2 :
//-----------------------------//
//Penggunaan Pointer 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( );
}
D. Pointer Pada Pointer
Tidak terbatas menunjuk alamat dari suatu variabel, pointer dapat pula menunjuk ke pointer lainnya. Didalam pendeklarasianya, hanya menambahkan pointer reference ( * ) pada variabel yang akan ditunjuk.
Sebagai contoh :
char ilham;
char *raka; //pointer ke variabel
char **amir; //pointer pada pointer
ilham = '75';
raka = &ilham;
amir = &raka;
Contoh :
// -----------------------------//
//Penggunaan Pointer to Pointer //
//------------------------------//
#include<stdio.h>
#include<conio.h>
#include<iostream.h>
main()
{
int ilham;
int *raka; //pointer ke variabel
int **amir; //pointer pada pointer
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( );
}
E. Pointer pada Array
Konsep Array diantaranya adalah banyak loncatan dari pointer satu ke pointer yang lain. karena secara internal array juga menyatakan alamat, yaitu pengenal array sama dengan alamat pada elemen pertama, pada array. Sebagai contoh sederhana dapat anda lihat pada contoh program berikut:
Contoh :
//------------------------------//
//Penggunaan Pointer to 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( );
}
F. Pointer pada String
Pointer pada string dapat anda lihat pada contoh program berikut:
Contoh :
/* ------------------- */
/* Pointer pada String */
/* ------------------- */
#include <iostream.h>
#include <conio.h>
main( )
{
char band_metal[ ] = "SEPULTURA";
char *band_punk = "RANCID";
cout<<"Nama Band Metal = "<<band_metal<<endl;
cout<<"Nama Band Punk = "<<band_punk;
band_punk+=3; //menambah nilai penunjuk / pointer
cout<<"Nama Band Metal = "<<band_metal<<endl;
cout<<"Nama Band Punk = "<<band_punk;
getche( );
}
Pada program diatas, terdapat perubahan nilai pointer band_punk , yang di tunjukkan oleh penambahan nilai pointer pada band_punk+=3, secara default, pembacaan dilakukan mulai dari pointer pertama, karena sudah terjadi penambahan dengan 3, maka pembacaan berpindah ke alamat ke.4, sehingga tercetak kata CID.