Tutorial Melayu

Pointer dalam C

Introduction

user

Fairuz

System Engineer (Texas Instruments France), Masters in Electronics , Embedded System Engineering,


LATEST POSTS

Nota: git alias yang biasa digunakan 05th December, 2013

Nota: Android .gitignore 23rd February, 2013

C/C++

Pointer dalam C

Posted on .

Terdapat 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 0x3333 manakala lokasi pointer ptr adalah 0x1234.

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 0x3333, jadi 0x3333 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 
#include 

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 0x0000 dan nilai d adalah lokasi c iaitu 0x0008. Seperti yang diterangkan di atas, *c bermaksud nilai di dalam kotak a iaitu 100 dan *d bermaksud nilai di dalam kotak c iaitu 0x0000. Jadi bolehkah kita akses nilai di dalam kotak a dengan menggunakan pointer d? Jawapannya boleh dengan bantuan **d.

profile

Fairuz

http://www.tutorialmelayu.com

System Engineer (Texas Instruments France), Masters in Electronics , Embedded System Engineering,

Comments

Leave a Reply

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

View Comments (1) ...
Navigation