27/03/12

Pointer



Pointer banyak digunakan dalam bahasa pemrograman, awalnya ga mudeng juga sih tapi coba deh.
Pointer = alamat
Variable pointer :        a. “&” berarti alamat dari
                                    b. “*” berarti isi dari
Setiap variable menempati ruang memory sebesar 4byte (1 byte = 8 bit), dan setiap alamat memory berkapasitas 1 byte. Sehingga membutuhkan empat buah alamat memory untuk menyimpan sebuah variable.
berikut peta memory pada komputer yang berisikan variable 100 dan 200.



Berikut contoh penggunaan pointer dalam program (dalam hal ini, saya menggunakan bahasa C)

#include

int main(void)
{
    int a=100;
    int b=200;
    int c=300;

    printf("\n a = %d",a);
    printf("\n b = %d",b);
    printf("\n c = %d",c);

    printf("\n alamat a = %d",&a);
    printf("\n alamat b = %d",&b);
    printf("\n alamat c = %d",&c);

    /* Deklarasi variabel pointer */
    int *pointer_a;                                                   /* Variabel dengan nama pointer_a berisi alamat */

    /* pointer a diisi dnegan alamat variabel a */
    pointer_a=&a;

    printf("\n &pointer_a = %d",&pointer_a);        /* alamat dari pointer_a*/
    printf("\n *pointer_a = %d",*pointer_a);          /* isi dari pointer_a */
    printf("\n &*pointer_a = %d",&*pointer_a);    /* alamat dari isi pointer_a */
    printf("\n *&pointer_a = %d",*&pointer_a);    /* ini dari alamat pointer_a */


    return 0;
}


hasil eksekusi

Pada tiga baris awal menunjukan  nilai dari variable a, b, dan c. Tiga baris selanjutnya menunjukan alamat memory dimana variable-variable tersebut disimpan. Dapat dilihat bahwa pada alamat setiap variable nilainya berselisih empat angka, hal tersebut menunjukan setiap variable disimpan pada empat alamat memory.
Kembali ke program, selanjutnya di deklarasikan berturut-turut variable "*" dan "&" hanya untuk variable a.
Empat baris terakhir pada hasil eksekusi menunjukan:
  1. &pointer_a, alamat dari pointer_a berarti alamat dari variable pointer_a
  2. *pointer_a, isi dari pointer_a berarti nilai yang ada pada pointer_a yaitu nilai a
  3. &*pointer_a, alamat dari isi pointer_a berarti alamat variable a
  4. *&pointer_a, isi dari alamat pointer_a berarti alamat variable a
masih bingung???
silahkan simak yang berikut,
anggap saja variable adalah wadah, setiap wadah memiliki jenis sendiri-sendiri. Misalnya ada wadah khusus untuk menyimpan buah, sayur, daging dan sebagainya. Kemudian ada lagi sebuah lemari yang berisi beberapa rak. Berarti dalam lemari terdapat rak, wadah dan isi dari wadah.

Begitu juga dalam pemrograman, ada wadah untuk menyimpan nilai, ada juga wadah untuk menyimpan alamat. Nah, wadah untuk menyimpan alamat kita anggap saja sebagai lemari. Dalam lemari ini ada rak (yang dilambangkan dengan "&") dan ada isi wadah (yang dilambangkan dengan "*").

summary analogy
variable             = wadah
niali variable     = isi wadah (dalam hal ini buah)
alamat variable = rak dalam lemari












Kembali ke program, pada awalnya kita mendeklarasikan variable a yang bernilai 100. Anggaplah wadah a yang berisi jeruk. Kemudian, dideklarasikan kembali sebuah variable yang diberi nama pointer_a, dimana pointer_a diisi dengan alamat variable a. anggaplah wadah pointer_a berisi nilai rak wadah a.

Ketika perintah untuk mencetak a maka keluarannya adalah nilai dari variable a yaitu 100, yang dianalogikan sebagai jeruk. Saat perintah &a dieksekusi, maka outputnya adalah alamat memory tempat tersimpannya variable a, yang dianalogikan sebagai rak tempat tersimpannya wadah. 

Sedangkan saat perintah &pointer_a dieksekusi, outputnya adalah alamat memory yang berisi variable dengan nama pointer_a, yang dianalogikan kembali sebagai rak. Perintah *pointer_a (isi dari pointer_a) outputnya nilai variable a, karena pointer_a diisi dengan alamat memory variable a. 
Perintah &*pointer_a (alamat dari isi pointer_a) outputnya adalah alamat memory tempat tersimpannya variable a. Sedangkan perintah *&pointer_a (isi dari alamat pointer_a) outputnya alamat memory variable a.

Tidak ada komentar:

Posting Komentar