‘pointer’ di bahasa C

saya nemu artikel lucu soal pointer dari sini. dan karena kebetulan juga pengen mengingatkan diri sendiri tentang pointer.. mari kita translasi yang ada di situ, hehehe.

—-

baiklah, penjelasan di bawah ini akan membantu kita mengingat kembali tentang pointer. Dengan ini, akan jelas bagaimana pemakaian string, bagaimana memberikan input dari keyboard. (nanti di bagian akhir ada tambahan dari tulisan lain tentang tambahan penjelasan tentang double pointer).

Q:  Variabel itu ada di mana?

>> Kita misalkan, memori adalah lahan tanah dan adress adalah alamatnya

Misalkan ada suatu komplek perumahan yang terdiri dari rumah-rumah. Rumah-rumahnya urut memanjang dari utara ke selatan. Rumah yang paling utara nomornya ’0′ dan terus sampai rumah yang paling selatan punya nomor misalnya ’255′ (1 komplek seperti ini = 1 byte). Untuk penjelasan setelah ini, kita anggap isi dari memori itu adalah tulisan yang tertulis di papan nama suatu rumah. Jadi, misalnya yang tinggal di rumah nomor 10 adalah Pak Budi, maka isi dari memori atau rumah itu adalah Pak Budi. (Pak Budi inilah yang sebenarnya adalah Pak Variabel.. jadi, Pak Budi a.k.a. variabel)

>> Pak Budi ingin pindah rumah

Ketika Pak Budi dilahirkan (variabelnya dideklarasikan), maka dia sudah diberi oleh Tuhan suatu tempat untuk dia hidup di dunia ini.. Pak Budi adalah orang yang sangat beruntung. Di manakah itu? Kita tidak tahu, dan sepertinya tidak usah terlalu memikirkannya. Tetapi, bagaimanapun juga, Pak Budi, karena mempunyai tempat tinggal, maka dia mempunyai alamat. Di awal Pak Budi tinggal di sini, kita tidak tahu asalnya apa yang tertulis di papan nama rumah itu. Misalnya, mungkin tulisannya adalah nama orang yang dulu tinggal di situ. Tapi, tentu saja papan nama ini bisa kita ganti namanya seenak kita (smoga Pak Budi nggak marah :P )

Maksudnya di sini, ketika suatu variabel telah dideklarasikan, maka dia akan mempunyai alamat di suatu memori di suatu tempat, tapi kita tidak tahu di mana itu. Yang jelas, variabel akan menempati tempat itu, tapi bisa saja sebenarnya di situ masih ada nilai lain yang sudah ada sebelumnya.

#include <stdio.h>
main(){
int i;
printf(“%d\n”, i);}

tergantung compilernya, bisa saja keluar nilai aneh di output code di atas. Mungkin akan keluar error “nilai i belum terdefinisi, ” tapi, tetap ini bisa di-compile.

>> Pak Budi sebenarnya adalah seorang yang kaya raya

Ngomong-ngomong, ketika kita mendeklarasikan suatu int, maka akan disiapkan suatu tempat sebesar yang dibutuhkan untuk suatu variabel bertipe int. Nah, int atau integer mempunyai kapasitas lebih dari 1 byte.

Sebenarnya, Pak Budi ini adalah manusia dari ras integer yang butuh tempat besar untuk tinggal. Ras integer ini orangnya kaya raya. Dia bisa beli tempat untuk kebutuhannya langsung 2 byte. Nah, tapi tapi, terus kalo dia langsung beli 2 komplek, bagaiamana alamatnya Pak Budi. Di sini ditetapkan, alamat Pak Budi nomornya adalah nomor rumah yang paling utara.

>> Jadi, sebenarnya Pak Budi itu tinggal di mana??

Ya.. tanya aja sama Pak Budi. Cara untuk bertanya pada Pak Budi adalah dengan menambahkan ‘&’ sebelum nama Pak Budi disebutkan. Misalnya dengan menulis:

printf(“%d\n”, &i);

nanti akan dikasi tahu di mana Pak Budi tinggal :)

Q: Bagaimana dengan variabel yang berupa pointer?

>> Ada seorang lagi yang bernama Pak Andi. Pak Andi adalah seorang pointer yang mempunyai pekerjaan di bawah kementerian kependudukan sehingga dia harus menghafal alamat orang-orang.

Di bahasa C, ada variabel yang punya tugas hanya untuk mencatat suatu alamat memori. Variabel semacam ini disebut variabel pointer. Cara mendeklarasikannya adalah:

int *p; //<- tambahkan tanda asterisk di depannya.

Di sini bukan berarti, pointer ini mempunyai tipe integer. Tapi, maksudnya adalah, dia adalah suatu pointer untuk menunjuk suatu alamat yang digunakan untuk menyimpan integer. Jadi dengan deklarasi ini, bisa berarti: datanglah Pak Andi ke dunia ini dengan diamanahi untuk mengingat alamat seseorang dari ras integer.

Misalnya, Pak Andi mendapat perintah dari pemerintah untuk mengingat alamat Pak Budi yang merupakan ras integer. Cara menuliskannya adalah dengan:

p=&i;

dengan ini, isi dari variabel pointer p adalah alamat dari i.

Karena Pak Andi tahu di mana rumah Pak Budi, maka Pak Andi bisa pergi ke rumah Pak Budi. Kita bisa bertanya kepada Pak Andi, siapakah yang tinggal di alamat yang diingat oleh beliau. Untuk bertanya kepada Pak Andi, siapa yang tinggal di alamat itu, kita tambahkan ‘*’ lagi di sebelah Pak Andi.

#include <stdio.h>
main(){
int *p, i;
i=10;
p=&i;                         //alamat i dimasukkan ke dalam pointer p
printf(“%d\n”, *p);} //asterisk di sini beda dengan asterisk yang digunakan untuk mendeklarasikan pointer

>> Sebenarnya Pak Andi adalah penjahat

Yah, mungkin kayaknya uda pada tahu, kalau Pak Andi disogok pake asterisk di sebelahnya, dia mau-mau aja ngasih tahu alamat orang yang diingatnya. Dan Pak Andi juga bisa disogok buat mengganti akta tanahnya Pak Budi dengan nama orang lain. Caranya adalah:

p=&i;
*p=100;

Dengan ini, Pak Budi akan terusir dari rumahnya, dan Pak Ndut cepek (100) akan legal secara hukum tinggal di alamat Pak Budi. (Warning: ati2 memperlakukan Pak Andi ya!).

Nah, begitulah kisah Pak Budi dan Pak Andi :)

—–

Hmm.. kayaknya mungkin emang lebih enak baca page aslinya si :D abis ini pengen nulis tentang double pointer, tapi sepertinya postingan kali ini sudah terlalu panjang. Jadi, biar bisa langsung dibaca, silakan liat di halaman ini,

Ciao!