Recent Posts

Pointer pada C++

Sekedar share catatan kecil mengenai penggunaaan pointer dalam C++.


------------------------------------pointer C++----------------------------------------

Reference operator: &
dapat diartikan sebagai 'alamat dari'.
contoh:
aya = &beth
aya adalah alamat dari beth.

Sebaliknya

Dereference operator: *
dapat diartikan sebagai 'nilai dari'
contoh:
beth = *aya
beth adalah nilai dari aya.

Satu buah reference dapat berisi banyak variabel(nilai). Hal ini dapat dilihat dari contoh berikut:

aya = &beth
//aya adalah alamat dari beth
*aya = 10
//salah satu dari nilai aya adalah 10, yang berarti nilai beth adalah 10.

Berikut ini adalah skema memori dari aya, diasumsikan alamat beth di dalam aya adalah 1234
 
 1231     1232     1233     1234
=======================
|          |          |          |   10   |
=======================
                     aya

Lalu bila ingin menambahkan variabel lain ke dalam aya:

aya = &carla
//aya adalah alamat dari carla
*aya=29
//salah satu dari nilai aya adalah 29, yang berarti nilai carla adalah 29.

Jika diasumsikan alamat carla adalah 1236, skema memorinya menjadi:

 1231     1232   1233     1234     1235    1236
====================================
|          |          |          |     10   |          |     29   |
====================================
                                   aya
dan begitu seterusnya jika menambahkan variabel ke dalam sebuah pointer

==============================================================================
Cara Mendeklarasikan pointer
==============================================================================
Pointer dapat dideklarasikan dalam bentuk seperti di bawah ini:

int name;
int *aya = & name;

selain itu juga dapat dideklarasikan seperti ini:

int name;
int *aya;
aya=&name;

Namun jangan mendeklarasikannya seperti ini:

int name;
int *aya;
*aya=&name;

Mengapa?karena seharusnya setelah mendeklarasikan sebuah pointer, tanda * menunjukkan bahwa itu adalah sebuah pointer bukan dereference operator(meski keduanya menggunakan tanda yang sama). Ingat keduanya adalah fungsi yang berbeda. Jadi, deklarasi diatas jelas-jelas salah!

Namun dalam kasus array, ada pengecualian mengenai hal di atas. Hal ini ditunjukkan dalam contoh di bawah ini:

char * aya="solacia";

berikut adalah skema memori dari 'solacia':
=======================================
|    s    |    o    |    l    |    a    |    c    |    i    |    a    |
=======================================                     
 1101     1102    1103   1104  1105   1106    1107
  ^
  |
  |
 aya

aya menyimpan nilai alamat memori pertama array "solacia". Jadi, penting untuk diingat disini bahwa aya mengandung nilai 1101 bukan "s" ataupun solacia.

============================================================================
Aritmatika pointer
===============================================================================

Kita bisa melakukan pengoperasian aritmatika pada pointer. Namun perlu
diperhatikan di dalam pointer operasi aritmatika yang bisa dilakukan hanya penambahan dan pengurangan.
Misalnya kita mendeklarasikan pointer seperti ini:

int *myint;
char *mychar;
float *myreal;

Maka, operasi aritmatika yang bisa kita tuliskan misalnya:
myint++;
mychar++;
myreal++;

Post a Comment

0 Comments