Variabel merupakan suatu nilai yang disimpan dalam memory yang dapat diakses dengan
identifier. Variabel ini sesunggunhnya disimpan pada suatu alamat didalam memory. Dimana
setiap alamat memory akan berbeda dengan yang lainnya (unik).
Ketika suatu variable dideklarasikan , ada 3 hal yang dapat diassosiasikan yaitu: nama, type data
dan alamat pada memori.
Contohnya deklarasi :
Int n;
Berdasarkan pendeklarasian diatas, n adalah nama variable dengan type data integer yang biasa
ditulis Int ,dan alamat tempat alokasi memori untuk n akan disimpan Dengan alamat memory
dengan notasi hexadecimal seperti 0x8fd4fff4 yang dapat digambarkan sbb :
kotak pada gambar mewakili tempat penyimpanan variabel yang berada di memory, nama variabel
berada disebelah kiri kotak, alamat variabel terdapat diatas kotak, dan jenis tipe data berada
dibawahnya sedangkan apabila diketahui nilai variabel tersebut maka akan terdapat didalam kotak.
suatu nilai variabel dapat diakses melalui nama variabelnya, sebagai contoh kita dapat mengetahui
nilai variabel dengan menuliskan statement cout << n; dan untuk mengakses suatu alamat
suatu variabel dapat digunakan operator alamat & , sebagai contoh kita dapat mengetahui alamat
variable pada memori dengan statement cout << &n;
Dapat disimpulkan bahwa nama variabel menunjukkan nilai suatu variabel secara lagsung
sedangkan suatu pointer menunjukkan atau mengarahkan suatu nilai dengan tidak langsung yaitu
dengan cara mereferensikannya.
Reference
Suatu Reference atau referensi adalah suatu alias atau dapat dikatakan sebagai nama lain sebagai
petunjuk dari nama sebenarnya (sinonim). Reference dapat dideklarasikan menggunakan sintaks :
Tipe& nama-ref = nama-var;
Dimana tipe & adalah tipe data, nama-ref adalah nama referensi, dan nama-var adalah nama
variabel.
Sebagai contoh , pendeklarasian pointer reference :
int& rn=n; // rn adalah sinonim untuk n
Pada deklarasi r dan rn adalah nama berbeda untuk suatu variabel yang sama; r dan rn
memiliki nilai variabel yang sama. Seperti konstanta, reference harus diinisialisasi ketika
dideklarasikan dan diinisialisasikan dengan variable bukan literal.
int& rn=33; // ERROR: 33 is not a variable!
Ada beberapa compiler yang memperbolehkan pendeklarasian dengan literal, tetapi akan tetap
muncul warning mengenai temporary variable yang harus dibuat untuk mengalokasikan memory
yang dimana dapat dipanggil reference rn.
Meskipun reference harus diinisialisasikan pada variable, refernce bukan variable. Variable adalah
suatu objek Reference adalah variable yang tidak terpisah karena akan mengarah pada satu nilai
dan satu alamat.
Pada baris pertama output menunjukkan bahwa n dan rn memiliki alamat yang sama yaitu
0x8fb8fff4 dengan nama yang berbeda untuk satu objek. Sedangkan pada baris kedua output
menunjukkan bahwa reference tersebut mengarah atau mereferensi pada suatu objek, pada program
ini hanya terdapat satu objek yaitu yang terdapat pada alamat 0x8fb8fff4, kesimpulannya
reference rn, rn2, rn3 mengarah ke objek yang sama.
Pada C++, operator reference & digunakan untuk 2 tujuan yang khusus :
- ketika diterapkan sebagai prefix atau awalan dari nama suatu objek.
- ketika diterapkan sebagai suffix atau akhiran pada suatu type T, yang menunjukkan type
yang “ mengarah ke T “, sebagai contoh, int& adalah type yang “mengarah ke int”, pada
7
contoh reference 2 n dideklarasikan mempunyai tipe data int, dan rn dideklarasikan untuk
memiliki type reference int.
C++ memiliki 5 type derived, ketika T adalah type maka:
- const T adalah type derived “ constant T ”
- T() adalah type derived “ function returning T ”
- T[] adalah type derived “ array of T ”
- T& adalah type derived “ reference to T ”
- T* adalah type derived “ Pointer to T ”
POINTER.
Operator reference/& mengembalikan alamat memory dari suatu variable ketika digunakan. Kita
juga dapat menyimpan suatu alamat pada suatu variable lain. Type dari variable yang dapat
menyimpan suatu alamat disebut Pointer. Variabel pointer harus mendapatkan type “pointer to T“
, dimana T adalah type dari objek dimana pointer itu ditunjuk. Seperti yang sudah dijelaskan pada
akhir penjelasan reference bahwa “pointer to T” disimbolkan dengan T*, sebagai contoh bahwa
suatu alamat dari variable dengan tipe int dapat disimpan dalam variabel pointer dengan tipe int*.
Dapat digambarkan sbb :
Variabel ndideklarasi dengan angka 33 , dengan alamat 0x8fbafff4. variable pn dideklarasi
sama dengan &n yang merupakan alamat dari n, jadi nilai dari pn adalah 0x8fbafff4 , tetapi
pn adalah objek yang berbeda yang memiliki nilai alamat dari n , dikatakan berbeda karena pn
memiliki alamat berbeda yaitu 0x8fbafff2.
Variabel pn disebut “pointer” karena bernilai “points” atau alamat dari lokasi nilai yang lain. Nilai
dari pointer tsb adalah suatu alamat. Alamat tersebut tergantung pada computer dimana program
itu berjalan. Dengan gambar diatas dapat pula dijelaskan bahwa 2 variable n dan pn
9
&
1775
dimana pn adalah pointer dari n dan n memiliki nilai 33. pointer dapat dikatakan juga sebagai
“locator” : yang mengalokasikan objek lain melalui alamat.
Operator Alamat (Address operator (&)).
Pada saat pendeklarasian variable, user tidak diharuskan menentukan lokasi sesungguhnya pada
memory, hal ini akan dilakukan secara otomatis oleh kompilerdan operating sysem pada saat runtime. Jika ingin mengetahui dimana suatu variable akan disimpan, dapat dilakukan dengan
memberikan tanda ampersand (&) didepan variable , yang berarti "address of".
Contoh :
budi = &ani;
Akan memberikan variable budi alamat dari variable ani, karena variable ani diberi awalan karakter
ampersand (&), maka yang menjadi pokok disini adalah alamat dalam memory, bukan isi variable.
Misalkan ani diletakkan pada alamat 1776 kemudian dituliskan instruksi sbb :
ani = 25;
susi = ani;
budi = &ani;
Maka hasilnya :
Operator DeReference (*)
Dengan menggunakan pointer, kita dapat mengakses nilai yang tersimpan secara langsung dengan
memberikan awalan operator asterisk (*) pada identifier pointer, yang berarti "value pointed by".
Contoh :
sari = *budi;
(dapat dikatakan: "sari sama dengan nilai yang ditunjuk oleh budi") sari = 25, karena budi
dialamat 1776, dan nilai yang berada pada alamat 1776 adalah 25.
Ekspresi dibawah ini semuanya benar, perhatikan :
ani == 25
&ani == 1776
budi == 1776
*budi == 25
Ekspresi
- Pertama merupakan assignation bahwa ani=25;
- Kedua, menggunakan operator alamat (address/derefence operator (&)), sehingga akan
mengembalikan alamat dari variable ani.
- Ketiga bernilai benar karena assignation untuk ted adalah budi = &ani;.
- Keempat menggunakan reference operator (*) yang berarti nilai yang ada pada alamat
yang ditunjuk oleh budi, yaitu 25. Maka ekspresi dibawah ini pun akan bernilai benar :
*budi == ani
*Operator of address or reference (&)
Digunakan untuk mengawali suatu variabel dan di baca sebagai "address of", sehingga:
&variable1 dapat dibaca sebagai "address of variable1"
*Operator of dereference (*)
Menunjukan apa yang terdapat pada alamat yang ditunjuk oleh suatu variabel. Dibaca
sebagai "value pointed by".
Array dan Pointer
Identifier suatu array equivalen dengan alamat dari elemen pertama, pointer equivalen dengan
alamat elemen pertama yang ditunjuk. Perhatikan deklarasi berikut :
int numbers [20];
int * p;
maka deklarasi dibawah ini juga benar :
p = numbers;
p dan numbers equivalen, dan memiliki sifat (properties) yang sama. Perbedaannya, user dapat
menentukan nilai lain untuk pointer p dimana numbers akan selalu menunjuk nilai yang sama
seperti yang telah didefinisikan. p, merupakan variable pointer, numbers adalah constant
pointer. Karena itu walaupun instruksi diatas benar, tetapi tidak untuk instruksi dibawah ini :
numbers = p; karena numbers adalah array (constant pointer), dan tidak ada nilai yang
dapat diberikan untuk identifier konstant (constant identifiers).
Comments
Post a Comment