POINTER C++
Apa Itu Pointer ?
Pointer adalah built-in type di C dan C++, dimana C++ mengambil konsep pointer dari C. Pointer sebenarnya sangat terkait dengan "Abstract C Machine", yaitu model mesin abstrak dimana program C bekerja. Abstract C Machine adalah mesin abstrak dimana mesin tersebut memiliki prosesor untuk menginterpretasikan stream of instruction, dan addressable memory yang terbagi kedalam 3 bagian : automatic memory, static memory dan free memory. Addressable memory adalah memory yang konten-nya dapat diambil jika diketahui alamatnya. Lebih jauh lagi, terdapat asumsi bahwa konten memori dapat di ambil dengan waktu konstan, tidak peduli berapa nilai alamat. Hal ini disebut dengan Random Access Memory. Pointer (variabel penunjuk) juga sering di defenisikan sebagai suatu variabel yang berisi alamat memori dari suatu variabel lain. Alamat ini merupakan lokasi dari obyek lain (biasanya variabel lain) di dalam memori. Contoh, jika sebuah variabel berisi alamat dari variabel lain, variabel pertama dikatakan menunjuk ke variabel kedua.
Bagaimana Cara Menggunakan Pointer ?
Operator &
Operator & merupakan operator alamat. Pada saat pendeklarasian variable, user tidak diharuskan menentukan lokasi sesungguhnya pada memory, hal ini akan dilakukan secara otomatis oleh kompiler dan operating sysem pada saat run-time. Jika ingin mengetahui dimana suatu variable akan disimpan, dapat dilakukan dengan memberikan tanda ampersand (&) didepan variable , yang berarti "address of". Contoh :
ted = &andy;
Penulisan tersebut berarti akan memberikan variable ted alamat dari variable andy. Karena variabel andy diberi awalan karakter ampersand (&), maka yang menjadi pokok disini adalah alamat dalam memory, bukan isi variable. Misalkan andy diletakkan pada alamat 1776 kemudian dituliskan instruksi sbb :
andy = 25;
fred = andy;
ted = &andy;
Maka hasilnya : Operator *
Operator * merupakan operator reference. Dengan menggunakan pointer, kita dapat mengakses nilai yang tersimpan secara langsung dengan memberikan awalan operator asterisk (*) pada identifier pointer, yang berarti "value pointed by". Contoh :
beth = *ted;
Ekspresi dibawah ini semuanya benar, perhatikan :
andy = 25;
&andy = 1776;
ted = 1776;
*ted = 25;
Ekspresi pertama merupakan assignation bahwa andy = 25;. Kedua, menggunakan operator alamat (address/derefence operator (&)), sehingga akan mengembalikan alamat dari variabel andy. Ketiga bernilai benar karena assignation untuk ted adalah ted = &andy;. Keempat menggunakan reference operator (*) yang berarti nilai yang ada pada alamat yang ditunjuk oleh ted, yaitu 25. Maka ekspresi dibawah ini pun akan bernilai benar : *ted = andy;
Alasan Mengapa Menggunakan Pointer
Adapun alas an penggunaan pointer pada C++ adalah sebagai berikut :
Mengirimkan “Parameter yang berupa variabel” ke dalam fungsi, artinya nilai variabel bisa diubah di dalam fungsi.
int nama fungsi (int *b) {
*b = *b + 1;
}
main () {
int x=1;
nama_fungsi (&x);
printf (”%d”, x); // output :2, karena x diubah di dalam fungsi menjadi x=x+1;
}
Penggunaan pointer dapat meningkatkan kinerja untuk operasi yang dilakukan secara berulang.
Contoh program yang menggunakan pointer ada di bawah (contohnya menggunakan pointer terhadap parameter yang di-pass ke aplikasi ie. argv)
Code:
/**
* pointer.c - contoh penggunaan pointer
* coded by void ;)
*/
#include
#include
int main(int argc, char **argv)
{
if (argc < style=""> /* prks prmtr yg dbrkn */
printf("aturan pakai: %s \n", argv[0]); /*jk prmtr tra pngl help */
exit(1); /* keluar */
}
printf("hello %s :)\n", argv[1]); /* tmpl psn & prmetr */
return 0; /* keluar */
}
Contoh penggunaannya
Code:
bash-4.0$ # compile source codenya
bash-4.0$ gcc -s -o pointer pointer.c
bash-4.0$ # jalankan aplikasinya tanpa parameter
bash-4.0$ ./pointer
aturan pakai: ./pointer
bash-4.0$ # jalankan aplikasinya dengan parameter
bash-4.0$ ./pointer "sandra dewi"
hello sandra dewi :)
bash-4.0$
Penjelasannya adalah kira-kira sebagai berikut :
- argc adalah jumlah argumen / parameter pada command line. jumlah minimalnya adalah 1, yaitu aplikasi yang sedang dieksekusi, dan nama aplikasi yang dieksekusi tersebut disimpan pada variabel argv, tepatnya argv[0]
- Seperti yang saya jelaskan di atas, variabel argv menampung parameter yang berada pada command line. kira2 seperti ini
Code:
bash-4.0$ killall enemy
argc = 2
argv[0] = killall
argv[1] = enemy
- Kalau masih bingung soal argc dan argv, mungkin bisa membuka lagi buku2 pemrograman C/C++ soalnya saya juga masih newbie soal pemrograman. kalau bisa, cari buku yang judulnya "C For Scientist and Engineers", sampai sekarang saya masih belajar dari buku itu.
- Nah, berikut ini sample kode serta penggunaannya untuk mengetahui nilai argc dan argv
Code:
#include
int main(int argc, char **argv)
{
static int i;
printf("nilai argc: %lu\n", argc);
for (i = 0; i <>
printf("argv[%lu] -> %s\n", i, argv[i]);
}
return 0;
}
Jika dieksekusi, maka contohnya seperti ini
Code:
bash-4.0$ ./test
nilai argc: 1
argv[0] -> ./test
bash-4.0$ ./test satu dua tiga empat capedeh
nilai argc: 6
argv[0] -> ./test
argv[1] -> satu
argv[2] -> dua
argv[3] -> tiga
argv[4] -> empat
argv[5] -> capedeh
Syarat Membuat Pointer
Variabel statis adalah variabel yang dideklarasikan dan dinamai pada saat penulisan program. Memori yang dipakai oleh variabel ini akan tetap ada (dianggap terpakai) selama program dimana variabel tersebut dideklarasikan sedang dijalankan.
Variabel dinamis adalah variabel yang dibuat (dan mungkin juga dihapus/dirusak) selama eksekusi progam. Karena variabel dinamis belum nyata ada pada
saat
program dikompilasi (ia nyata-nyata ada pada saat dibuat yaitu pada saat
program dieksekusi), maka variabel seperti ini tidak dapat dinamai pada
saat program dibuat/ditulis.
Satu-satunya cara untuk mengakses variabel dinamis adalah dengan menggunakan pointer. Saat suatu variabel dinamis dibuat, ia belum berisi data dan harus memiliki suatu tipe tertentu seperti halnya variabel biasa.
Sebaliknya variabel statis tidak dapat dibuat ataupun dihapus pada saat eksekusi program dan variabel pointer tidak dapat digunakan untuk menunjuk kepada variabel statis. Variabel statis dapat diakses hanya dengan menggunakan namanya dan bila kita ingin menunjuk pada suatu posisi dalam array maka kita dapat melakukannya dengan menggunakan indeks/variabel yang bertipe seperti indeks dari array.
Type Data Yang Dapat Menggunakan Pointer
Pointer Bertipe Void
Pada C++ terdapat pointer yang dapat menunjuk ke tipe data apapun, pointer semacam ini dideklarasikan dengan tipe void sehingga sering dikenal dengan istilah Void Pointer. Berikut ini contoh listing program yang menggunakan void pointer.
Hasilnya adalah :
Dari hasil yang diberikan oleh program di atas terlihat bahwa sebuah pointer yang bertipe void dapat digunakan untuk menunjuk tipe data int, double, dan char
Melewatkan Array Menggunakan Pointer
Selain yang telah disebutkan di atas, pointer juga dapat berfungsi untuk melewatkan variabel yang bertipe array di dalam sebuah fungsi. Berikut ini
ituliskan dua buah contoh program yang dapat menjelaskan pernyataan ini.
Program yang ditulis tanpa menggunakan pointer
Hasilnya adalah :
Program yang ditulis menggunakan pointer
Hasilnya adalah :
Pointer Aritmetika
Elemen-elemen array biasanya diakses melalui indeksnya, sebenarnya ada
cara lain yang lebih efisien, yaitu dengan menggunakan pointer. Pointer
semacam ini disebut dengan istilah pointer aritmetika. Konsep
dasar dari pointer aritmetika ini adalah melakukan operasi aritmetika
terhadap variabel yang bertipe pointer. Misalnya kita mempunyai 5 buah
data bertipe int yang disimpan dalam bentuk array dengan nama A dan
digambarkan sebagai berikut :
Hasilnya adalah :
Tipe Reference
Pada pembahasan pointer terdapat sebuah tipe data yang kerap kali digunakan, yaitu tipe reference. Tipe reference sebenarnya merupakan alias (julukan/ nama lain) dari variabel yang dideklarasikan dengan menggunakan tipe data tertentu. Misalnya kita mendeklarasikan sebuah variabel x yang bertipe int dan kita akan membuat alias (dengan nama n) dari variabel tersebut, maka hal yang harus dilakukan adalah mendeklarasikan alias tersebut menggunakan tipe reference yang dituliskan dengan int&. Berikut ini sintak yang menjelaskan contoh di atas.
Int x; //mendeklarasikan variabel x dengan int
Int& n = x; //mendeklarasikan n (yang merupakan alias x) dengan tipe reference
//(int&)
Alias n dibuat dengan cara mengakses alamat yang ditempati oleh variabel x, yaitu dengan menggunakan tanda &. Oleh karena n merupakan alias dari x, maka x dan n akan mempunyai nilai yang sama atau dengan kata lain keduanya akan saling mempengaruhi.
Pointer NULL
Pada saat program dijalankan, pointer akan menunjuk ke alamat acak pada memori, sehingga diperlukan inisialisasi agar hal tersebut tidak terjadi. Dalam C++ terdapat sebuah cara untuk membuat pointer tidak menunjuk ke alamat manapun, yaitu dengan mengisikan ponter tersebut dengan nilai NULL. Karena hal inilah maka pointer tersebut sering dinamakan pointer NULL (NULL Pointer). Sebagai contoh kita mempunyai pointer p, dan kita ingin melakukan inisialisasi pada pointer tersebut dengan nilai NULL, maka sintaknya adalah sebagai berikut.P = NULL;
No comments:
Post a Comment