Alamat (dereference) Operator(&):
Ampersand sign (&) : berarti alamat dari /"address of" dari sebuah data pada memori, hal ini merupakan implementasi dari pointer pada C++.
Contoh:
ted = &andy;
contoh penggunaan:
andy = 25;
fred = andy;
ted = &andy;
fred = andy;
ted = &andy;
Reference operator (*):
"value pointed by" nilai yang ditunjukkan oleh suatu variable pointer. Contohnya:
beth = *ted;
Artinya: "beth sama dengan nilai yang ditunjukkan oleh ted"). beth =25, ted =1776, dan the value pointed by 1776 = 25.
Strukturnya dalam memori:
Contoh lainnya:
beth = ted; // beth equal to ted ( 1776 )
beth = *ted; // beth equal to value pointed by ted ( 25 )
Contoh di atas sama dengan;
andy = 25;
ted = &andy;
ted = &andy;
Sehingga argument-argumen berikut ini adalah benar:
andy == 25
&andy == 1776
ted == 1776
*ted == 25
*ted == andy
Deklarasi variable dengan tipe pointer:
type * pointer_name;
Dimana: type adalah tipe dari data yang ditunjuk oleh pointer, bukan tipe data pointer itu sendiri. Contoh :
int * number;
char * character;
float * greatnumber;
char * character;
float * greatnumber;
// program pointer I #include <iostream.h> int main () { int value1 = 5, value2 = 15; int * mypointer; mypointer = &value1; *mypointer = 10; mypointer = &value2; *mypointer = 20; cout << "value1==" << value1 << "/ value2==" << value2; return 0; } | value1==10 / value2==20 |
Prog101.cpp
// program pointer II #include <iostream.h> int main () { int value1 = 5, value2 = 15; int *p1, *p2; p1 = &value1; // p1 = address of value1 p2 = &value2; // p2 = address of value2 *p1 = 10; // value pointed by p1 = 10 *p2 = *p1; // value pointed by p2 = value pointed by p1 p1 = p2; // p1 = p2 (value of pointer copied) *p1 = 20; // value pointed by p1 = 20 cout << "value1==" << value1 << "/ value2==" << value2; return 0; } | value1==10 / value2==20 |
Prog102.cpp
Cara lain untuk mendeklarasikan tipe data pointer:
int *p1, *p2;
Pointers and array:
int numbers [20];
int * p;
int * p;
Maka cara pengisian nilai ke dalam variable p berikut adalah benar:
p = numbers;
Tetapi statemen berikut adalah salah:
numbers = p;
// program pointer III #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; } | 10, 20, 30, 40, 50, |
Prog103.cpp
Cara lain untuk mengisi nilai menggunakan pointer pada array:
a[5] = 0; // a [offset of 5] = 0
*(a+5) = 0; // pointed by (a+5) = 0
Inisialisasi Pointer :
int number;
int *tommy = &number;
int *tommy = &number;
Cara di atas dapat pula ditulis dengan cara sebagai berikut:
int number;
int *tommy;
tommy = &number;
int *tommy;
tommy = &number;
Cara di atas juga tidak sama dengan cara berikut ini:
int number;
int *tommy;
*tommy = &number;
int *tommy;
*tommy = &number;
Contoh lain inisialisasi pointer:
char * terry = "hello";
Grafik:
keterangan:
variable terry berisi nilai 1702 dan bukan ‘h’ ataupun “hello”
Untuk merubah karakter ‘o’ pada string “hello” di atas dapat digunakan dua cara berikut ini:
terry[4] = '!';
*(terry+4) = '!';
*(terry+4) = '!';
grafik:
Arithmetic of pointers
Alamat Variabel Pointer pada Memori:
Contoh:
char *mychar; // char = 1 byte dilokasi memori 1000
short *myshort; // short = 2 byte dilokasi memori 2000
long *mylong; // long = 4 byte dilokasi memori 3000
short *myshort; // short = 2 byte dilokasi memori 2000
long *mylong; // long = 4 byte dilokasi memori 3000
Maka, bila kita menulis statement berikut ini :
mychar++;
myshort++;
mylong++;
myshort++;
mylong++;
Grafik:
Pointer to pointer:
Contoh:
char a;
char * b;
char ** c;
a = 'z';
b = &a;
c = &b;
char * b;
char ** c;
a = 'z';
b = &a;
c = &b;
grafik di bawah ini menunjukan bila alamat variable a, b, dan c di atas berada pada alamat memori 7230, 8092 and 10502:
Maka :
c is a variable of type (char **) with a value of 8092
*c is a variable of type (char*) with a value of 7230
**c is a variable of type (char) with a value of'z'
*c is a variable of type (char*) with a value of 7230
**c is a variable of type (char) with a value of'z'
void pointer:
void pointer dapat menunjuk ke semua tipe data , dari integer atau float atau string dan karakter.
Salah satu kegunaan dari void pointer adalah untuk mengisi parameter ke suatu fungsi, seperti contoh di bawah ini:
// penambahan integer #include <iostream.h> void Tambah(void* data, int type) { switch (type) { case sizeof(char) : (*((char*)data))++; break; case sizeof(short): (*((short*)data))++; break; case sizeof(long) : (*((long*)data))++; break; } } int main () { char a = 5; short b = 9; long c = 12; Tambah (&a,sizeof(a)); Tambah (&b,sizeof(b)); Tambah (&c,sizeof(c)); cout << (int) a << ", " << b << ", " << c; return 0; } | 6, 10, 13 |
Prog104.cpp