Pointer dalam C
Tuesday, October 18th, 2011Terdapat satu pembolehubah khas yang dinamakan pointer yang digunakan secara meluas dalam C. Pelajar yang mempelajari C biasanya mempunyai masalah dengan pointer kerana dikatakan susah difahami. Saya akan cuba mengatasi masalah ini dengan menggunakan pendekatan yang berlainan dengan menggunakan gambarajah.
Jika kita lihat analogi pembolehubah di artikel ini, ia juga boleh diaplikasikan di sini tapi bezanya, pointer hanya boleh menyimpan lokasi pembolehubah lain.

Untuk lebih memahami pointer, kita boleh lihat contoh di bawah di mana kita mempunyai satu pembolehubah dan satu pointer. Kita akan menganggap lokasi memori untuk pembolehubah harga adalah 0×3333 manakala lokasi pointer ptr adalah 0×1234.
int harga = 500; int * ptr = &harga; |

int harga = 500 akan menghasilkan kotak bernama harga yang mengandungi angka 500. Manakala int * ptr akan menghasilkan pointer yang mengandungi lokasi pembolehubah harga (&harga merujuk kepada lokasi harga). Jika lokasi harga adalah 0×3333, jadi 0×3333 lah yang akan terkandung di dalam kotak ptr seperti gambarajah di atas.
Memandangkan kotak ptr mengandungi lokasi kotak harga, bagaimana jika kita mahu menukar nilai harga dengan menggunakan pembolehubah pointer ptr? Jawapannya adalah dengan menggunakan *ptr. *ptr merujuk kepada nilai di dalam kotak yang dirujuk oleh kotak ptr. Jadi dalam kes di atas, *ptr merujuk kepada nilai 500 di dalam kotak harga.
#include <stdio.h> #include <stdlib.h> int main(int argc, char *argv[]) { int harga = 500; int * ptr = &harga; printf("Harga %d \n", harga); printf("Harga %d \n", *ptr); harga = 600; printf("Harga %d \n", harga); printf("Harga %d \n", *ptr); *ptr = 700; printf("Harga %d \n", harga); printf("Harga %d \n", *ptr); system("PAUSE"); return 0; } |
Harga 500 Harga 500 Harga 600 Harga 600 Harga 700 Harga 700 |
Kita boleh membayangkan situasi yang sedikit kompleks seperti di bawah:
int a = 100; int b = 200; int *c = &a; int **d = &c; |
Yang boleh digambarkan seperti berikut:

di mana nilai a adalah 100, nilai b adalah 200, nilai c adalah lokasi a iaitu 0×0000 dan nilai d adalah lokasi c iaitu 0×0008. Seperti yang diterangkan di atas, *c bermaksud nilai di dalam kotak a iaitu 100 dan *d bermaksud nilai di dalam kotak c iaitu 0×0000. Jadi bolehkah kita akses nilai di dalam kotak a dengan menggunakan pointer d? Jawapannya boleh dengan bantuan **d.
Selamat mencuba! Jika anda mempunyai soalan mengenai tutorial ini, sila kemukakan di ruangan di bawah. Untuk soalan lain yang berkaitan dengan aturcara web atau jika anda mempunyai pandangan/idea untuk tutorial baru, e-mail saya di wanmohdfairuz@mckk9903.com atau kemukakan pandangan/soalan anda di dalam forum tutorialmelayu di http://www.tutorialmelayu.com/forum.
Daftar percuma di sini.

