2. Alamat dan PointerAlamat dan Pointer
Konsep pointer sebenarnya cukupKonsep pointer sebenarnya cukup
sederhana.sederhana.
Pointer sesungguhnya berisi alamat dariPointer sesungguhnya berisi alamat dari
suatu data, bukan data sebagaimanasuatu data, bukan data sebagaimana
variabel yang telah anda kenal.variabel yang telah anda kenal.
3. Alamat dan PointerAlamat dan Pointer
Setiap byte di dalam memori komputerSetiap byte di dalam memori komputer
memiliki sebuah alamat.memiliki sebuah alamat.
Di dalam memori inilah variabel disimpan.Di dalam memori inilah variabel disimpan.
Tetapi tentu saja pemrogram tidak perluTetapi tentu saja pemrogram tidak perlu
menyebutkan alamat dari suatu variabelmenyebutkan alamat dari suatu variabel
secara explisit.secara explisit.
Pada saat program dimuat di dalamPada saat program dimuat di dalam
memori, variabel akan diletakkan denganmemori, variabel akan diletakkan dengan
sendirinya pada alamat tertentu.sendirinya pada alamat tertentu.
4. Alamat dan PointerAlamat dan Pointer
Suatu pointer di dalam programSuatu pointer di dalam program
dimaksudkan untuk menunjuk suatudimaksudkan untuk menunjuk suatu
alamat memori.alamat memori.
Misalnya kalauMisalnya kalau pintpint adalah pointer, danadalah pointer, dan
vintvint adalah variabel yang terletak diadalah variabel yang terletak di
memori beralamatmemori beralamat 0xfff20xfff2, pointer, pointer pintpint
dapat diatur agar menunjuk ke variabeldapat diatur agar menunjuk ke variabel
vintvint..
6. Mengetahui Alamat Suatu VariabelMengetahui Alamat Suatu Variabel
Alamat suatu variabel dapat diketahuiAlamat suatu variabel dapat diketahui
dengan mudah, caranya tambahkandengan mudah, caranya tambahkan
operator alamat, berupa simbol & di depanoperator alamat, berupa simbol & di depan
nama variabel.nama variabel.
Dengan mengirimkan keDengan mengirimkan ke coutcout, alamat dari, alamat dari
suatu variabel akan ditampilkan ke layar.suatu variabel akan ditampilkan ke layar.
7. Mengetahui Alamat Suatu VariabelMengetahui 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();
}
8. Mengetahui Alamat Suatu VariabelMengetahui Alamat Suatu Variabel
Perlu diketahui, notasi 0x pada hasilPerlu diketahui, notasi 0x pada hasil
program di depan menyatakan notasiprogram di depan menyatakan notasi
heksadesimal.heksadesimal.
Pada C++, tanda & juga dipakai untukPada C++, tanda & juga dipakai untuk
referensi (alias dari suatu variabel).referensi (alias dari suatu variabel).
9. Mendefinisikan Variabel PointerMendefinisikan Variabel Pointer
Format :Format :
tipe_datatipe_data dapat berupa sembarang tipedapat berupa sembarang tipe
data seperti halnya variabel bukan pointer.data seperti halnya variabel bukan pointer.
nama_variabelnama_variabel adalah variabel pointer.adalah variabel pointer.
tipe_data *nama_variabel
10. Mengisi Variabel PointerMengisi Variabel Pointer
Supaya variabel pointer menunjuk ke variabel lain, mula-mula harusSupaya variabel pointer menunjuk ke variabel lain, mula-mula harus
diisi dengan alamat dari variabel yang hendak ditunjuk.diisi dengan alamat dari variabel yang hendak ditunjuk.
Misalnya terdapat pendefinisian seperti berikut :Misalnya terdapat pendefinisian seperti berikut :
VariabelVariabel pintpint dapat diatur agar menunjuk kedapat diatur agar menunjuk ke vintvint dengan caradengan cara
sebagai berikut :sebagai berikut :
Pernyataan diatas berarti : “Pernyataan diatas berarti : “pintpint diisi dengan alamat daridiisi dengan alamat dari vintvint”.”.
int vint = 55;
int *pint;
pint = &vint;
11. Mengisi Variabel PointerMengisi Variabel Pointer
//program76.cpp
#include <iostream.h>
#include <conio.h>
void main()
{
int vint = 55;
int *pint;
pint = &vint; //pointer menunjuk ke vint
cout<<"Alamat vint = "<<&vint<<endl;
cout<<"Isi pint = "<<pint<<endl;
getch();
}
12. Mengisi Variabel PointerMengisi Variabel Pointer
Pada contoh di depan :Pada contoh di depan :
Baris tersebut ternyata menampilkan isiBaris tersebut ternyata menampilkan isi
dari pointer itu sendiri, bukan isi daridari pointer itu sendiri, bukan isi dari
variabelvariabel vint.vint.
cout<<"pint = "<<pint<<endl;
13. Mengakses Nilai Yang DitunjukMengakses Nilai Yang Ditunjuk
PointerPointer
Berdasarkan contoh di depan, nilai dariBerdasarkan contoh di depan, nilai dari vintvint dapatdapat
diakses melaluidiakses melalui pintpint setelah pernyataan dibawah inisetelah pernyataan dibawah ini
dijalankan.dijalankan.
Cara mengaksesnya adalah dengan melibatkan operatorCara mengaksesnya adalah dengan melibatkan operator
“tak langsung” yang berupa simbol * dan diletakkan di“tak langsung” yang berupa simbol * dan diletakkan di
depan nama variabel pointer. Contoh :depan nama variabel pointer. Contoh :
Berarti “nilai yang ditunjuk olehBerarti “nilai yang ditunjuk oleh pintpint”.”.
pint = &vint;
*pint;
14. Mengakses Nilai Yang DitunjukMengakses Nilai Yang Ditunjuk
PointerPointer
//program77.cpp
#include <iostream.h>
#include <conio.h>
void main()
{
int vint = 55;
int *pint;
pint = &vint; //pointer menunjuk ke vint
cout<<"Isi vint = "<<vint<<endl;
cout<<"Alamat vint = "<<&vint<<endl;
cout<<"Isi pint = "<<pint<<endl;
cout<<"Nilai yang ditunjuk oleh pint : "<<*pint<<endl;
getch();
}
15. Mengakses Nilai Yang DitunjukMengakses Nilai Yang Ditunjuk
PointerPointer
Program di depan menunjukkanProgram di depan menunjukkan
pengaksesan terhadappengaksesan terhadap vintvint dapatdapat
dilakukan melaluidilakukan melalui *pint*pint..
Contoh berikut menunjukkan isiContoh berikut menunjukkan isi vintvint
diubah melaluidiubah melalui *pint.*pint.
16. Mengakses Nilai Yang DitunjukMengakses Nilai Yang Ditunjuk
PointerPointer
//program78.cpp
#include <iostream.h>
#include <conio.h>
void main()
{
int vint = 55;
int *pint;
pint = &vint; //pointer menunjuk ke vint
cout<<"Isi vint semula = "<<vint<<endl;
*pint = 77;
cout<<"Isi vint sekarang = "<<vint<<endl;
getch();
}
17. Pointer VoidPointer Void
Pada contoh-contoh program di depan telah ditunjukkanPada contoh-contoh program di depan telah ditunjukkan
pointer yang menunjuk ke tipe data tertentu.pointer yang menunjuk ke tipe data tertentu.
Sebenarnya juga dimungkinkan untuk membuat pointerSebenarnya juga dimungkinkan untuk membuat pointer
tak bertipe.tak bertipe.
Caranya yakni dengan meletakkan kata kunci void diCaranya yakni dengan meletakkan kata kunci void di
bagian penentu tipe pointer. Contoh :bagian penentu tipe pointer. Contoh :
Suatu pointer void seperti contoh diatas dapat digunakanSuatu pointer void seperti contoh diatas dapat digunakan
untuk menunjuk ke sembarang tipe data.untuk menunjuk ke sembarang tipe data.
void *ptr;
18. Pointer VoidPointer 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();
}
19. Pointer VoidPointer Void
Pada program di depan, bentuk berikut perluPada program di depan, bentuk berikut perlu
diberikan :diberikan :
Ini disebabkan C++ tidak tahu maksudIni disebabkan C++ tidak tahu maksud *ptr*ptr
mengingatmengingat ptrptr adalah pointer void.adalah pointer void.
Cara ini bukan hanya berlaku jika kitaCara ini bukan hanya berlaku jika kita
bermaksud mengambil nilai yang ditunjuk olehbermaksud mengambil nilai yang ditunjuk oleh
ptrptr tapi juga ketika kita mengubahnya.tapi juga ketika kita mengubahnya.
Seperti contoh program berikut :Seperti contoh program berikut :
*(int*)ptr
*(float*)ptr
20. Pointer VoidPointer 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();
}