pointer c/c++

17 Jul 2016,
Share: 

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;
}

Suggestion blogs

ค่า CRI คืออะไร

สวัสดีครับ ในบทความนี้เราจะมาเรียนรู้เกี่ยวกับค่า CRI กันครับ และค่าความถูกต้องของสีมีความสําคัญอย่างไร เอาไว้ทําอะไร

วิธี set default printer device CUPS linux

วิธีการ  Set default printer device ใน CUPS บนระบบปฎิบัติการ linux สําหรับใครที่ยังไม่รู้จักว่า CUPS คืออะไร ไปอ่านเพิ่มเติมได้ที่ ติดตั้ง และ share printer to raspberry pi or linux computer

vb.net excel database ด้วย OleDb

ในบทความนี้จะมาพูดถึงเรื่องการทํางานกับ file Excel ด้วย VB.NET โดยจะสามารถเข้าถึงข้อมูล แก้ไขข้อมูล และเพิ่มข้อมูล ด้วยคําสั่ง SQL เหมือนกับเป็น Database ตัวนึง ซึ่งการใช้งานจะต้องใช้ libraries ที่ชื่อว่า OleDb ใน Virtual Studio จะมีให้อยู่แล้ววิธีการใช้งานจะแบ่งเป็นสองแบบดังนี้การใช้งานโดยไม่ต้องการผลลัพธ์ของข้อมูลเช่น insert, update, deleteการใช้งานโดยต้องการผลลัพธ์ของข้อมูลเช่น Query ข้อมูลจาก Excel(คําสั่ง Select)


Copyright © 2019 - 2026 thiti.dev |  v1.60.0 |  Privacy policy | 

Build with ❤️ and Astro.

Github profile   Linkedin profile   Instagram   X profile   Nostr   Youtube channel   Telegram   Email contact   วงแหวนเว็บ