pointer c/c++

17 Jul 2016

Share to:

pointer เป็นชนิดข้อมูลประเภทหนึ่งที่สร้างจากชนิดข้อมูลแบบพื้นฐานทั่วไป โดยชนิดข้อมูลแบบ pointer จะแตกต่างกับชนิดข้อมูลพื้นฐานตรงที่ชนิดข้อมูลแบบพื้นฐานจะเก็บและดึงข้อมูลจากตัวแปรโดยตรง แต่ชนิดข้อมูลแบบ pointer จะเก็บค่าที่อยู่(Address) ของตัวแปรอื่น และใช้ค่าที่อยู่นี้อ้างอิงไปยังข้อมูลที่เก็บอยู่ในตัวแปรนั้นอีกที เพื่อทําการเก็บและดึงข้อมูลจากตัวแปรนั้นอีกที

pointer เป็นตัวแปรชนิดหนึ่งดังนั้น มันจึงมีที่อยู่ในหนวยความจํา(Memory) เหมือนกับตัวแปรอื่นๆทั่วไป โดยตัวของ pointer นั้นหน้าที่หลักของมันคือ ชี้ไปยัง address ใดๆ เพื่อจัดการกับข้อมูลที่เก็บอยู่ใน address นั้นๆ ถ้าประกาศตัวแปร int a = 3; จะหมายถึง สร้างตัวแปรชนิด integer ชื่อว่า a และเก็บจํานวนเต็ม 3 ไว้ในตัวมัน แต่หากประกาศตัวแปร pointer ขึ้นมาใช้งาน จะกําหนดค่าเลขจํานวนเต็ม 3 ให้กับตัวแปรโดยตรงไม่ได้ เพราะอย่างที่กล่าวมาข้างต้นตัวแปร pointer เป็นเพียงแค่ตัวชี้ ดังนั้นเราจึงต้องกําหนด pointer ชี้ไปยังตัวแปร a ก่อน pointer จึงจะมีข้อมูลเท่ากับ 3

การประกาศตัวแปร pointer ขึ้นใช้งาน

รูปแบบการประกาศตัวแปร pointer คือ

ชนิดข้อมูล *ชื่อตัวแปรpointer
  • ชนิดข้อมูล คือ ชนิดของข้อมูลที่ pointer จะชี้ หรืออ้างอิง
  • ชื่อตัวแปรpointer คือ ชื่อของตัวแปร pointer ที่ต้องการ

ตัวอย่าง

int *p; //คือประกาศตัวแปร p เป็น pointer มีชนิดข้อมูลเป็นจํานวนเต็ม
char *p1; //คือประกาศตัวแปร p1 เป็น pointer มีชนิดข้อมูลเป็นตัวอักษร
float *p2; //คือประกาศตัวแปร p2 เป็น pointer มีชนิดข้อมูลเป็นเลขจํานวนเต็ม

หากประกาศตัวแปร pointer เป็นชนิดข้อมูลประเภทใดแล้ว ตัวแปร pointer จะต้องชี้ไปยังข้อมูลประเภทนั้น เช่น

int a = 100;
int *p1;
char b = 'Q'
char *p2;

p1 = &a;
p2 = &b;

การกําหนดค่าเริ่มต้นให้กับตัวแปร pointer

การประกาศตัวแปรขึ้นใช้งานนั้น ไม่ว่าจะเป็นการประกาศตัวแปรแบบพื้นฐาน ตัวแปรประเภทอาร์เรย์หรือตัวแปร pointer ก็ตาม ถ้าไม่ทําการกําหนดค่าเริ่มต้นให้กับตัวแปรเหล่านี้ ค่าที่ตัวแปรเก็บไว้ก็จะเก็บเป็นค่าขยะ ซึ่งไม่สามารถคาดเดาได้ว่าเป็นค่าอะไร เช่นถ้าประกาศ int *p; โดยไม่กําหนดค่าเริ่มต้นให้กับตัวมัน จะพบว่า p เก็บค่า address อะไรสักอย่างที่ไม่มีความหมาย คือเป็นค่าขยะนั่นเอง ดังนั้นเมื่อประกาศใช้งานตัวแปร pointer แล้วจําเป็นจะต้องกําหนดค่าเริ่มต้นให้กับมันด้วย หรือให้มันชี้ไปยัง address 0, NULL เช่น

int a = 20;
int *p1 = &a;

int *p2 = 0;
int *p3 = NULL;

สัญลักษณ์ที่ทําคัญในการทํางานกับ pointer

pointer มีสัญลักษณ์สําคัญอยู่ 2 ตัวคือ

  • สัญลักษณ์ & หมายถึง ดึงเอาค่า address ของตัวแปรใดๆออกมา เช่นถ้าต้องการจะดึงค่า address ของตัวแปร a ออกมาสามารถเขียนได้ดังนี้ &a
  • สัญลักษณ์ * หมายถึง ดึงเอาค่าข้อมูลที่แท้จริงที่ pointer นั้นๆชี้ไป

ตัวอย่างการใช้งาน pointer

#include <stdio.h>

int main () {

   int  a = 20;   //ประกาศตัวแปร int แล้วกําหนดค่า 20
   int  *p;       //สร้างตัวแปร pointer ประเภท int

   p = &a;  //กําหนดให้ pointer p ชี้ไปยัง address ของตัวแปร a

   //แสดงผล address ของตัวแปร a
   printf("Address of a variable: %x\n", &a  );

   //แสดงผล address ที่ pointer ชี้ไป ซึ่งก็คือ address ของตัวแปร a
   printf("Address stored in p variable: %x\n", p);

   //แสดงผลข้อมูลที่ pointer ชี้ไป
   printf("Value of *p variable: %d\n", *p);

   return 0;
}

Copyright © 2019 - 2024 thiti.dev |  v1.19.0 |  Privacy policy |  status | 

            วงแหวนเว็บ