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

Suggestion blogs

Delegate คืออะไร และใช้งานอย่างไร

Delegate คืออะไรDelegate จะเก็บตําแหน่ง Address ของ Method ที่ต้องการจะเรียกใช้ ทําให้เราสามารถเรียกใช้ Method ใดๆ ผ่าน Delegate ได้ คุณอาจจะสงสัยว่า ทําไมไม่เรียกใช้ Function ตรงๆไปเลย ข้อดีของการเรียกผ่าน Delegate คือสามารถเรียก Mathod ของ Class อื่นได้

การอ่านค่าตัวต้านทาน Resistor

ตัวต้านทานจะแบงตามประเภทการใช้งานได้สองแบบคือAxial ResistorSMD Resistorวิธีการอ่านค่าก็จะแตกต่างกัน

สมบัติของจำนวนนับ

จำนวนนับจํานวนนับ คือจำนวนที่สร้างขึ้นมาเพื่อใช้ในชีวิตประจำวัน ซึ่งจะเริ่มจาก 1 จำนวนนับถัดไปจะเพิ่มขึ้นทีละหนึ่งไปเรื่อยๆ เช่น 2, 3, 4, 5, 6, 7, 8, 9, 10, 11 ไม่มีที่สิ้นสุด จำนวนนับนี้เรียกได้ว่าเป็นจำนวนธรรมชาติ หรือจำนวนเต็มบวก


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

Build with ❤️ and Astro.

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