POINTER
Defenisi :
• Pointer (variabel penunjuk) adalah suatu variabel
yang berisi alamat memori dari suatu variabel lain.
Alamat ini merupakan lokasi dari variabel lain di
dalam memori. Dengan kata lain, pointer berisi
alamat dari variabel yang mempunyai nilai tertentu
Cont.
• Suatu pointer di dalam program dimaksudkan untuk
menuntuk ke suatu alamat memori. Misalnya suatu
variabel N yang bertipe int dengan nilai 12 dan
disimpan di memori pada alamat 0xfff2, P adalah
pointer yang disimpan dalam alamat memori 0xfffA
maka nilai yang ada didalam alamat 0xfffA adalah
alamat dari variabel N yaitu 0xfff2.
Operator Pointer
• Suatu pointer dapat berisi alamat dari suatu variabel lain dan
untuk dapat mengakses nilai yang ada di dalam variabel
berpointer secara langsung dapat dilakukan dengan
menggunakan operator.
• Ada dua operator pointer yang disediakan oleh Borland C++,
yaitu:
Operator Dereference ( & ) Operator reference ( * )
Operator Deference ( & )
Penempatan suatu variabel ditentukan oleh sistem operasi. Untuk
suatu keperluan tertentu terkadang kita harus mengetahui alamat
suatu variabel di dalam memori. Dengan demikian, untuk dapat
mengetahui alamat suatu variabel di dalam memori kita dapat
melakukannya dengan menggunakan operator deference (&)
Nama_var_pointer = &variabel;
int x = 8;
int *xPtr;
Misalkan x yang bernilai 8 disimpan di memori pada alamat 0x0012ff50,
xPtr disimpan dalam memori pada alamat 0x0012ff4c yang berisi alamat
dari variabel x. Sehingga untuk mengetahui nilai yang ada pada alamat
yang disimpan oleh xPtr dapat kita lakukan seperti pernyataan berikut
dan nilai variabel dapat kita lihat pada gambar berikut :
Ptr = &x;
#include<iostream>
#include<conio.h>
using namespace std;
int main()
{
int x=8;
int *xPtr;
xPtr = &x;
cout<<"Nilai x = "<<x<<endl;
cout<<"Alamat x = "<<&x<<endl;
cout<<"Alamat x = "<<xPtr<<endl;
cout<<"Nilai yang disimpan pada alamat ";
cout<<xPtr<<" adalah "<<*xPtr;
getch();
}
Operator Reference ( * )
Digunakan untuk mengakses secara langsung nilai yang terdapat di
dalam alamat yang merupakan nilai dari variabel pointer. Dilakukan
dengan menambahkan operator reference (*) di depan nama variabel,
agar dapat menerjemahkan nilai sebenarnya dari suatu variabel.
Operator ini biasa disebut dengan value pointed by. Dengan
menggunakan operator * ini akan dihasilkan nilai yang berada pada
suatu alamat memori. Operator * bersifat unary (hanya memerlukan
suatu operand saja).
int x = 8;
int *xPtr;
Misalkan x yang bernilai 8 disimpan di memori pada alamat 0x0012ff50, xPtr
disimpan dalam memori pada alamat 0x0012ff4c yang berisi alamat dari variabel
x. Untuk mengetahui nilai yang ada pada alamat yang disimpan oleh xPtr dapat
kita lakukan seperti pernyataan berikut dan nilai variabel dapat kita lihat pada
gambar dibawah.
y = *xPtr;
Int main()
{
int x=8, y;
int *xPtr;
xPtr = &x;
y = *xPtr;
cout<<"Nilai x = "<<x<<endl;
cout<<"Alamat x = "<<&x<<endl;
cout<<"Alamat x = "<<xPtr<<endl;
cout<<"Nilai yang disimpan pada alamat ";
cout<<xPtr<<" adalah "<<y;
getch();
}
Deklarasi Pointer
Seperti halnya variabel yang lain, variabel pointer juga harus
dideklarasikan terlebih dahulu sebelum digunakan.
tipe_data *nama_var_pointer;
dimana:
•tipe_data dapat berupa sebarang tipe seperti halnya pada pendeklarasian
variabel bukan pointer
•nama_var_pointer adalah nama variabel pointer yang menunjuk ke data bertipe
tipe_data
Contoh
int *xPtr;
char *Karakter;
Mendeklarasikan xPtr merupakan variabel pointer yang menunjuk ke data bertipe int dan
Karakter merupakan variabel pointer yang menunjuk ke dapat bertipe char.
Tipe data pointer mendefinisikan tipe dari objek yang ditunjuk oleh pointer. Secara teknis, tipe
apa pun dari pointer dapat menunjukkan lokasi (di manapun) dalam memori. Bahkan operasi
pointer dapat dilaksanakan relatif terhadap tipe dasar apa pun yang ditunjuk
Pointer dan Array
Pointer dan array mempunyai hubungan yang dekat. Secara internal array
juga menyatakan alamat, dimana pengenal array sama dengan alamat
pada elemen pertama pada array.
Jika kita mau mengisi alamat suatu variabel ke dalam suatu variabel
pointer maka dapat dilakukan dengan menggunakan operator &, misalnya
xPtr = &x, yang berarti mengisi xPtr dengan alamat dari variabel x.
Hal ini berlaku hanya untuk variabel yang bukan variabel array. Tetapi jika
variabel array tidak perlu menggunakan operator &.
Contoh int Nilai[] = {45, 23, 50, 8, 12, 10, 15};
int *Ptr_Nilai;
agar Ptr_Nilai menunjuk ke array Nilai, maka diperlukan
pernyataan berikut:
Ptr_Nilai = Nilai;
Hal ini disebabkan karena nama array sebenarnya sudah menyatakan
pointer. Oleh sebab itu operator & tidak diperlukan lagi.
#include<iostream>
#include<conio.h>
#include<stdio.h>
using namespace std;
int main()
{
int Nilai[]={45, 23, 50, 8, 12, 10, 15};
int *Ptr_Nilai;
int i;
Ptr_Nilai = Nilai;
cout<<"\nNilai Ptr_Nilai : "<<Ptr_Nilai;
cout<<"\nAlamat array Nilai : "<<Ptr_Nilai;
cout<<"\nNilai yang ada pada alamat "<<Ptr_Nilai<<"adalah "<<*Ptr_Nilai;
cout<<"\nElemen array indeks pertama : "<<Nilai[0];
cout<<"\nElemen Array (dgn Array) : ";
for(i=0;i<7;i++)
cout<<Nilai[i]<<" "; //mencetak elemen array
cout<<"\n\nElemen Array (dgn pointer) : ";
for(i=0;i<7;i++)
cout<<*(Nilai+i)<<" "; //mencetak elemen array
getch();
}
Pointer pada Pointer
Variabel pointer menunjuk alamat suatu variabel. Di samping itu suatu
variabel pointer juga dapat menunjuk ke variabel pointer lainnya. Dalam
hal ini dilakukan dengan cara menambahkan operator reference (*) pada
variabel yang akan ditunjuk.
int Var_x;
int *xPtr1;
int **xPtr2;
•Var_x adalah variabel bertipe int
•*xPtr1 adalah variabel pointer yang menunjuk ke data bertipe int
•**xPtr2 adalah variabel pointer yang menunjuk ke pointer int
Di atas telah kita lihat bahwa agar xPtr menunjuk ke variabel Var_x dapat dilakukan dengan perintah:
xPtr1 = &Var_x;
Supaya xPtr2 juga dapat menunjuk ke xPtr1 dapat dilakukan dengan perintah:
xPtr2 = &xPtr1;
Karena xPtr2 telah menunjuk atau berisi alamat xPtr1 dan xPtr1 menunjuk atau berisi alamat dari
variabel Var_x, maka untuk mengakses nilai dari Var_x dapat dilakukan dengan perintah:
cout<<Var_x;
cout<<*xPtr1;
cout<<**xPtr2;
{
int x=8;
int *xPtr1;
int **xPtr2;
xPtr1 = &x;
xPtr2 = &xPtr1;
cout<<"Nilai x = "<<x<<endl;
cout<<"Nilai x = "<<*xPtr1<<endl;
cout<<"Nilai x = "<<**xPtr2<<endl;
getch();
}
Komentar
Posting Komentar