pointer

pointer (พอยน์เตอร์ ตัวชี้) เป็น datatype อย่างหนึ่งในภาษา C และ C++ ใช้เก็บ address (ที่อยู่หน่วยความจำ) ที่ใช้ในการอ้างถึงตัวแปรต่างๆในหน่วยความจำ RAM

องค์ประกอบของตัวแปร

สำหรับตัวแปรใดๆจะประกอบไปด้วย 4 ส่วนคือ

  1. ข้อมูลที่ตัวแปรเก็บ (value) เช่น int a = 42; ค่าที่เก็บคือ 42
  2. ชื่อตัวแปร (variable name, variable) ซึ่งเป็นชื่อเล่นของหน่วยความจำส่วนนั้น เช่น int a = 42; ชื่อตัวแปรคือ a
  3. ที่อยู่ของหน่วยความจำ (address) เป็นตัวเลขระบุถึงหน่วยความจำช่องต่างๆ สมมุติ RAM มีขนาด 1GB ($2^{30}$, 1073741824 bytes) ก็จะมี address 1073741824 ช่อง อาจเปรียบเทียบให้ RAM เป็น array ขนาดยักษ์ โดยมี address เป็น index ซึ่ง address นี้จะมีค่าไม่แน่นอน ขึ้นอยู่กับว่าเมื่อมีการจองหน่วยความจำ ระบบปฏิบัติการจะจัดสรรหน่วยความจำ/address ใดให้ ตัวอย่าง address เช่น 41608 เป็นต้น (เลขมั่วนะครับ :P)
  4. ชนิดข้อมูล (datatype) เป็นชนิดข้อมูลของตัวแปร ชนิดข้อมูลต่างๆกันก็อาจจะมีขนาดชนิดข้อมูลต่างกัน เช่น int 4 byte, short 2 byte เป็นต้น และอาจประมวลผลข้อมูลต่างกัน (เช่น float กับ int ต่างมีขนาด 4 byte แต่ประมวลผลและจัดเก็บข้อมูลต่างกัน) ตัวอย่างชนิดข้อมูลเช่น int

การดำเนินการของที่อยู่หน่วยความจำ

สมมุติ int a = 5; และ address ของ a เป็น 41608 (ต่อไปนี้จะเขียน address โดยมีขีดเส้นใต้ เพื่อแยกแยะความแตกต่างของ address กับ value)

  1. address-of / reference operator (เครื่องหมาย &) เอาใช้กับ variable ได้ address คืนมา จากตัวอย่างจะได้ว่า &a => 41608
  2. dereference (เครื่องหมาย *) เอาไว้ใช้กับ address ได้ variable คืนมา จากตัวอย่างจะได้ว่า *(41608) => a

สังเกตว่า *(&a) => a

array กับ address

การดำเนินการทางคณิตศาสตร์กับ address

pointer

malloc / free

Unless otherwise stated, the content of this page is licensed under Creative Commons Attribution-ShareAlike 3.0 License