การเขียนโปรแกรมภาษาซี/ตัวชี้

จาก วิกิตำรา
    • 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

สารบัญ[แก้ไข | แก้ไขต้นฉบับ]