Pengertian Variabel Pointer pada C / C++

   

    Pointer dapat didefinisikan sebagai suatu variabel yang menyimpan alamat memori. Beda dengan variabel biasa yang menyimpan sebuah nilai, pointer ini berisikan alamat saja.

    Jika kita mempunyai sebuah variabel dengan tipe data tertentu, maka untuk mendapatkan alamat dari variabel tersebut adalah dengan menggunakan operator &. Alamat inilah yang kemudian akan disimpan ke dalam variabel yang bertipe pointer. Untuk mendeklarasikan variabel sebagai pointer, kita hanya menambahkan tanda asterik (*) di depan nama variabel. Berikut ini bentuk umum dari pendeklarasian variabel yang bertipe pointer.

tipe_data *nama_pointer;

     Pemberian spasi pada tanda * tidak akan mengubah arti. Dengan demikian, penulisan seperti di atas bisa saja diganti dengan :

tipe_data* nama_pointer;

atau

tipe_data *nama_pointer;


Tipe data di atas berguna untuk menyatakan bahwa pointer yang kita deklarasikan tersebut akan ditempati oleh data dengan tipe tertentu. Sebagai contoh, kita akan mendeklarasikan pointer P yang akan ditempati oleh tipe data long, maka bentuk pendeklarasiannya adalah sebagai berikut :

//mendeklarasikan pointer P yang menunjuk ke tipe long
long *P ;
Jika kita mempunyai sebuah variabel yang bertipe long (misalnya X), maka kita dapat memerintahkan pointer P di atas untuk menunjukkan ke alamat yang ditempati oleh variabel X. untuk melakukan hal tersebut, kita perlu menuliskan kode seperti berikut :

//mendeklarasikan variabel X dengan tipe long
long X;
//mendeklarasikan pointer P
long *P;
//memerintahkan P untuk menunjuk alamat dari variabel X
P = &X;

Apabila kita analisis potongan kode di atas, sebenarnya konsepnya sangat sederhana. Kita tahu bahwa P adalah pointer (berisikan alamat) dan &X juga berisi alamat, maka kita dapat menyimpan alamat dari variabel X tersebut ke dalam pointer P. Kita tidak diizinkan untuk memasukkan sebuah nilai (bukan alamat) ke dalam pointer P, seperti yang ditunjukkan oleh kode berikut:

// Salah, karena X berupa nilai (bukan berupa alamat)
P = X;

Apabila kita memang ingnin mengisikan nilai ke dalam alamat yang disimpan oleh pointer P, maka seharusnya kita menggunakan tanda asterik (*) di depan nama pointer tersebut, yaitu dengna mengubah kode di atas menjadi seperti di bawah ini.

// Benar, karena *P adalah nilai yang berada pada pointer P
*P = X;

Sebagai catatan bahwa *P ini disebut dengan dereference pointer.

Untuk dapat lebih memahami konsep pointer. Berikut ini gambar yang mengilustrasikan kasus di atas



Pada gambar di atas Alamat 1 dari memori ditempati oleh variabel X yang bertipe long. Nilai dari variabel X tersebut adalah 10. Di atas kita mempunyai pointer P yang menunjuk ke alamat X, maka untuk mendapatkan nilai X kita dapat menggunakan dereference pointer, yaitu dengan *P. Dengan demikian, dapat disimpulkan bahwa jika:

P = &X; // Keduanya menyimpan alamat

maka:

*P = X; // Keduanya menyimpan nilai

Untuk membuktikan hal di atas, di sini kita akan mengimplementasikannya ke dalam sebuah program sederhana. Kode dari program tersebut adalah sebagai berikut :

#include <iostream>
using namespace std;
int main() {
  long *P;
  long X;


  P = &X;
  &X = &10; // Mengisikan nilai 10 ke dalam variabel X
  cout<<"Nilai X : "<<X<<endl;
  cout<<"Nilai *P : "<<*P<<endl;
  cout<<"Nilai P : "<<P<<endl;
  cout<<"Nilai &X : "<<&X<<endl;
  *P = 200; // Mengisikan nilai 200 ke dalam *P
  cout<<"Nilai X : "<<X<<endl;
  cout<<"Nilai *P : "<<*P<<endl;
  cout<<"Nilai P : "<<P<<endl;
  cout<<"Nilai &X : "<<&X<<endl;
  return 0;
}

Contoh hasil yang akan diberikan dari program di atas adalah sebagai berikut :

Nilai X : 10
Nilai *P : 10
Nilai P : 0x22ff08
Nilai &X : 0x22ff08
Nilai X : 200
Nilai *P : 200
Nilai P : 0x22ff08
Nilai &X : 0x22ff08
Apabila kita amati hasil program di atas, pada saat kita mengisikan variabel X dengan nilai 10, *P juga akan bernilai 10, Begitu juga pada saat kita memasukkan nilai ke dalam *Pdengna nilai 200, variabel X juga akan berubah menjadi 200. Hal ini menunjukkan bahwa *P akan selalu sama dengna X, dan ini semua disebabkan karena *P dan variabel X tersebut menempati alamat yang sama, yaitu 0x22ff08 .

0 Response to "Pengertian Variabel Pointer pada C / C++"

Post a Comment