Pointer adalah variabel yang
menyimpan referensi ke variabel lain yang kita sebut pointer
Pointer dikatakan "menunjuk ke" variabel yang referensi mereka menyimpan
Pointer dikatakan "menunjuk ke" variabel yang referensi mereka menyimpan
Referensi operator (&)
Alamat yang menempatkan variabel di
dalam memori adalah apa yang kita sebut referensi ke variabel tersebut. Ini
referensi ke variabel dapat diperoleh dengan mendahului identifier dari sebuah
variabel dengan tanda ampersand (&), yang dikenal sebagai referensi
operator, dan yang dapat harfiah diterjemahkan sebagai "alamat".
Sebagai contoh:
ted = &andy;
Hal ini akan menetapkan ke ted alamat dari variabel andy, sejak kapan mendahului nama variabel andy dengan operator referensi (&) kita tidak lagi berbicara tentang isi dari variabel itu sendiri, tapi tentang referensi nya (misalnya, alamat di memori).
ted = &andy;
Hal ini akan menetapkan ke ted alamat dari variabel andy, sejak kapan mendahului nama variabel andy dengan operator referensi (&) kita tidak lagi berbicara tentang isi dari variabel itu sendiri, tapi tentang referensi nya (misalnya, alamat di memori).
Perhatikan fragmen kode berikut:
andy = 25;
fred = andy;
ted = &andy;
Perhatikan fragmen kode berikut:
(count)
Pertama, kami telah diberi nilai 25
ke andy (variabel yang alamatnya di memori kita diasumsikan 1776).
Pernyataan kedua disalin ke fred isi variabel andy (yang 25). Ini adalah tugas operasi standar, seperti telah kami lakukan begitu banyak kali sebelumnya.
Akhirnya, pernyataan ketiga salinan untuk ted bukan nilai yang terkandung dalam andy tetapi referensi untuk itu (yaitu, alamatnya, yang telah kita diasumsikan 1776). Alasannya adalah bahwa dalam operasi ini tugas ketiga kami telah mendahului andy identifier dengan operator referensi (&), jadi kami tidak lagi merujuk pada nilai andy tetapi acuannya (alamatnya di memori).
Pernyataan kedua disalin ke fred isi variabel andy (yang 25). Ini adalah tugas operasi standar, seperti telah kami lakukan begitu banyak kali sebelumnya.
Akhirnya, pernyataan ketiga salinan untuk ted bukan nilai yang terkandung dalam andy tetapi referensi untuk itu (yaitu, alamatnya, yang telah kita diasumsikan 1776). Alasannya adalah bahwa dalam operasi ini tugas ketiga kami telah mendahului andy identifier dengan operator referensi (&), jadi kami tidak lagi merujuk pada nilai andy tetapi acuannya (alamatnya di memori).
Deperence operator (*)
Kita baru saja melihat bahwa sebuah
variabel yang menyimpan referensi ke variabel lain disebut pointer. Pointer
dikatakan "menunjuk ke" variabel yang referensi mereka menyimpan.
Menggunakan pointer kita dapat langsung mengakses nilai yang tersimpan dalam variabel yang menunjuk ke. Untuk melakukan ini, kita hanya perlu mendahului identifier pointer dengan tanda bintang (*), yang bertindak sebagai operator dereference dan yang dapat harfiah diterjemahkan ke "nilai ditunjukkan oleh".
Karena itu, berikut dengan nilai-nilai contoh sebelumnya, jika kita menulis:
beth = * ted;
Menggunakan pointer kita dapat langsung mengakses nilai yang tersimpan dalam variabel yang menunjuk ke. Untuk melakukan ini, kita hanya perlu mendahului identifier pointer dengan tanda bintang (*), yang bertindak sebagai operator dereference dan yang dapat harfiah diterjemahkan ke "nilai ditunjukkan oleh".
Karena itu, berikut dengan nilai-nilai contoh sebelumnya, jika kita menulis:
beth = * ted;
Deference operator (*)
beth = * ted;
(bahwa kami bisa dibaca sebagai: "beth sama dengan nilai ditunjuk oleh ted") beth akan mengambil nilai 25, karena ted adalah 1776, dan nilai yang oleh 1776 adalah 25.
(bahwa kami bisa dibaca sebagai: "beth sama dengan nilai ditunjuk oleh ted") beth akan mengambil nilai 25, karena ted adalah 1776, dan nilai yang oleh 1776 adalah 25.
perbedaan antara referensi dan
operator dereference:
(&) Adalah operator referensi
dan dapat dibaca sebagai "alamat"
(*) Adalah operator dereference dan dapat dibaca sebagai "nilai ditunjuk oleh"
Sebelumnya kita melakukan dua operasi berikut tugas:
andy = 25;
ted = &andy;
Tepat setelah dua pernyataan ini, semua ungkapan berikut akan memberikan hasil benar sebagai:
andy == 25
& andy == 1776
ted == 1776
* ted == 25
(*) Adalah operator dereference dan dapat dibaca sebagai "nilai ditunjuk oleh"
Sebelumnya kita melakukan dua operasi berikut tugas:
andy = 25;
ted = &andy;
Tepat setelah dua pernyataan ini, semua ungkapan berikut akan memberikan hasil benar sebagai:
andy == 25
& andy == 1776
ted == 1776
* ted == 25
Mendeklarasikan variabel jenis pointer
Karena kemampuan dari pointer ke
langsung mengacu pada nilai yang menunjuk, menjadi perlu untuk menentukan dalam
deklarasi yang tipe data pointer akan menunjuk. Ini bukan hal yang sama untuk
menunjuk ke sebuah char daripada untuk menunjuk ke sebuah int atau deklarasi
float.The pointer berikut format ini:
ketik * nama;?
dimana jenis tipe data nilai yang penunjuk dimaksudkan untuk menunjuk ke. Tipe ini bukan tipe dari pointer itu sendiri! tetapi tipe data pointer menunjuk ke. Sebagai contoh:
int * nomor;
char * karakter;
ketik * nama;?
dimana jenis tipe data nilai yang penunjuk dimaksudkan untuk menunjuk ke. Tipe ini bukan tipe dari pointer itu sendiri! tetapi tipe data pointer menunjuk ke. Sebagai contoh:
int * nomor;
char * karakter;
Float * greatnumber ;
Contoh Program Pointer
#include <iostream.h>
int main () {
int n1, n2;
int * ptr;
ptr = &n1;
*ptr = 10;
ptr = &n2;
*ptr = 20;
cout << “Nilai 1 :" << n1
<< endl;
cout << “Nilai 2 :" << n2
<< endl;
return 0;
}
Contoh Program Pointer 2:
#include <iostream.h>
int main(){
int n1 = 5,n2 = 15;
int * p1, * p2;
p1 = &n1; //p1 = address of n1
p2 = &n2; //p2 = address of n2
*p1 = 10;//value pointed by p1 = 10
*p2 = *p1;//value pointed by p2 = value
pointed by p1
p1 = p2; // p1 = p2 (value of pointer is
copied)
*p1 = 20; // value pointed by p1 = 20
cout << “Nilai 1 :" << n1
<< endl;
cout << “Nilai 2 :" << n2
<< endl;
return 0;
POINTER & ARRAY
Konsep array sangat
terikat pada salah satu pointer. Bahkan, identifier
dari sebuah array adalah setara
dengan alamat dari elemen pertama,
sebagai pointer setara dengan alamat dari elemen pertama yang poin, jadi sebenarnya mereka adalah konsep yang sama.
Sebagai contoh, seandainya kedua deklarasi:
int angka [20];
int * p;
Operasi tugas berikut akan berlaku:
p = angka;
Setelah itu, p dan nomor akan sama dan akan memiliki sifat yang sama. Satu-satunya perbedaan adalah bahwa kita bisa mengubah nilai p pointer dengan yang lain, sedangkan nomor akan selalu menunjuk ke pertama dari 20 elemen tipe int dengan yang didefinisikan. Oleh karena itu, tidak seperti p, yang merupakan pointer biasa, angka adalah array, dan array dapat dianggap sebagai pointer konstan. Oleh karena itu, alokasi berikut tidak akan berlaku:
nomor = p;
Karena angka adalah array, sehingga beroperasi sebagai pointer konstan, dan kita tidak bisa memberikan nilai pada konstanta.
int angka [20];
int * p;
Operasi tugas berikut akan berlaku:
p = angka;
Setelah itu, p dan nomor akan sama dan akan memiliki sifat yang sama. Satu-satunya perbedaan adalah bahwa kita bisa mengubah nilai p pointer dengan yang lain, sedangkan nomor akan selalu menunjuk ke pertama dari 20 elemen tipe int dengan yang didefinisikan. Oleh karena itu, tidak seperti p, yang merupakan pointer biasa, angka adalah array, dan array dapat dianggap sebagai pointer konstan. Oleh karena itu, alokasi berikut tidak akan berlaku:
nomor = p;
Karena angka adalah array, sehingga beroperasi sebagai pointer konstan, dan kita tidak bisa memberikan nilai pada konstanta.
// more pointers
#include <iostream.h>
int main () {
int numbers[5];
int * p;
p = numbers; *p = 10;
p++; *p = 20;
p = &numbers[2]; *p = 30;
p = numbers + 3; *p = 40;
p = numbers; *(p+4) = 50;
for (int n=0; n<5; n++)
cout
<< numbers[n] << ", ";
return 0;
}
0 komentar:
Posting Komentar