Anda di halaman 1dari 20

POINTER (PART 1)

ALAMAT DAN POINTER


 Konsep pointer sebenarnya cukup sederhana.
 Pointer sesungguhnya berisi alamat dari suatu data,
bukan data sebagaimana variabel yang telah anda kenal.
ALAMAT DAN POINTER
 Setiap byte di dalam memori komputer memiliki sebuah
alamat.
 Di dalam memori inilah variabel disimpan.
 Tetapi tentu saja pemrogram tidak perlu menyebutkan
alamat dari suatu variabel secara explisit.
 Pada saat program dimuat di dalam memori, variabel
akan diletakkan dengan sendirinya pada alamat tertentu.
ALAMAT DAN POINTER
 Suatu pointer di dalam program dimaksudkan untuk
menunjuk suatu alamat memori.
 Misalnya kalau pint adalah pointer, dan kint adalah
variabel yang terletak di memori beralamat 0xfff2,
pointer pint dapat diatur agar menunjuk ke variabel kint.
ALAMAT DAN POINTER

pint
0xfff4 0xfff2

menunjuk ke kint
alamat

kint

0xfff2
MENGETAHUI ALAMAT SUATU
VARIABEL
 Alamat suatu variabel dapat diketahui dengan mudah,
caranya tambahkan operator alamat, berupa simbol & di
depan nama variabel.
 Dengan mengirimkan ke cout, alamat dari suatu variabel
akan ditampilkan ke layar.
MENGETAHUI ALAMAT SUATU
VARIABEL
//program75.cpp
#include <iostream.h>
#include <conio.h>

void main()
{
int bil1 = 5;
float bil2 = 7.5;
double bil3 = 17.777;

cout<<"Isi variabel : "<<endl;


cout<<"bil1 = "<<bil1<<endl;
cout<<"bil2 = "<<bil2<<endl;
cout<<"bil3 = "<<bil3<<endl;

cout<<endl;
cout<<"Alamat variabel : "<<endl;
cout<<"bil1 = "<<&bil1<<endl;
cout<<"bil2 = "<<&bil2<<endl;
cout<<"bil3 = "<<&bil3<<endl;
getch();
}
MENGETAHUI ALAMAT
SUATU VARIABEL
Perlu diketahui, notasi 0x pada hasil program di
depan menyatakan notasi heksadesimal.
Pada C++, tanda & juga dipakai untuk referensi (alias
dari suatu variabel).
MENDEFINISIKAN VARIABEL POINTER
 Format :

tipe_data *nama_variabel
 tipe_data dapat berupa sembarang tipe data seperti
halnya variabel bukan pointer.
 nama_variabel adalah variabel pointer.
MENGISI VARIABEL POINTER
 Supaya variabel pointer menunjuk ke variabel lain, mula-mula harus
diisi dengan alamat dari variabel yang hendak ditunjuk.
 Misalnya terdapat pendefinisian seperti berikut :

int kint = 55;


int *pint;
 Variabel pint dapat diatur agar menunjuk ke kint dengan cara
sebagai berikut :

pint = &kint;
 Pernyataan diatas berarti : “pint diisi dengan alamat dari kint”.
MENGISI VARIABEL POINTER

//program76.cpp
#include <iostream.h>
#include <conio.h>

void main()
{
int kint = 55;
int *pint;

pint = &kint; //pointer menunjuk ke kint


cout<<"Alamat kint = "<<&kint<<endl;
cout<<"Isi pint = "<<pint<<endl;
getch();
}
MENGISI VARIABEL POINTER
 Pada contoh di depan :

cout<<"pint = "<<pint<<endl;
 Baris tersebut ternyata menampilkan isi dari pointer itu
sendiri, bukan isi dari variabel kint.
MENGAKSES NILAI YANG
DITUNJUK POINTER
 Berdasarkan contoh di depan, nilai dari kint dapat
diakses melalui pint setelah pernyataan dibawah ini
dijalankan.

pint = &kint;
 Cara mengaksesnya adalah dengan melibatkan operator
“tak langsung” yang berupa simbol * dan diletakkan di
depan nama variabel pointer. Contoh :

*pint;
 Berarti “nilai yang ditunjuk oleh pint”.
MENGAKSES NILAI YANG
DITUNJUK POINTER
//program77.cpp
#include <iostream.h>
#include <conio.h>

void main()
{
int kint = 55;
int *pint;
pint = &kint; //pointer menunjuk ke kint

cout<<"Isi kint = "<<kint<<endl;


cout<<"Alamat kint = "<<&kint<<endl;
cout<<"Isi pint = "<<pint<<endl;
cout<<"Nilai yang ditunjuk oleh pint : "<<*pint<<endl;
getch();
}
MENGAKSES NILAI YANG
DITUNJUK POINTER
 Program di depan menunjukkan pengaksesan terhadap
kint dapat dilakukan melalui *pint.
 Contoh berikut menunjukkan isi kint diubah melalui
*pint.
MENGAKSES NILAI YANG
DITUNJUK POINTER
//program78.cpp
#include <iostream.h>
#include <conio.h>

void main()
{
int kint = 55;
int *pint;
pint = &kint; //pointer menunjuk ke kint

cout<<"Isi kint semula = "<<kint<<endl;


*pint = 77;
cout<<"Isi kint sekarang = "<<kint<<endl;
getch();
}
POINTER VOID
 Pada contoh-contoh program di depan telah ditunjukkan
pointer yang menunjuk ke tipe data tertentu.
 Sebenarnya juga dimungkinkan untuk membuat pointer
tak bertipe.
 Caranya yakni dengan meletakkan kata kunci void di
bagian penentu tipe pointer. Contoh :

void *ptr;

 Suatu pointer void seperti contoh diatas dapat digunakan


untuk menunjuk ke sembarang tipe data.
POINTER VOID

//program79.cpp
#include <iostream.h>
#include <conio.h>

void main()
{
int bil1 = 55;
float bil2 = 33.45;
void *ptr;

ptr = &bil1; //bisa menunjuk ke int


cout<<"Nilai yang ditunjuk ptr : "<<*(int*)ptr<<endl;

ptr = &bil2; //bisa menunjuk ke float


cout<<"Nilai yang ditunjuk ptr : "<<*(float*)ptr<<endl;
getch();
}
POINTER VOID

 Pada program di depan, bentuk berikut perlu diberikan :

*(int*)ptr
*(float*)ptr
 Ini disebabkan C++ tidak tahu maksud *ptr mengingat

ptr adalah pointer void.


 Cara ini bukan hanya berlaku jika kita bermaksud

mengambil nilai yang ditunjuk oleh ptr tapi juga ketika


kita mengubahnya.
 Seperti contoh program berikut :
POINTER VOID

//program80.cpp
#include <iostream.h>
#include <conio.h>

void main()
{
int bilangan = 55;
void *ptr;

ptr = &bilangan;
cout<<"bilangan semula : "<<bilangan<<endl;
*(int*)ptr = 77; //mengubah nilai bilangan melalui ptr
cout<<"bilangan sekarang : "<<bilangan<<endl;
getch();
}

Anda mungkin juga menyukai