การเขียนโปรแกรมภาษาซี/ตัวชี้
- pointer** (**พอยน์เตอร์** **ตัวชี้**) เป็น [[[datatype]]] อย่างหนึ่งในภาษา C และ C++ ใช้เก็บ **address** (**ที่อยู่หน่วยความจำ**) ที่ใช้ในการอ้างถึงตัวแปรต่างๆในหน่วยความจำ RAM
+ องค์ประกอบของตัวแปร สำหรับตัวแปรใดๆจะประกอบไปด้วย 4 ส่วนคือ
- **ข้อมูลที่ตัวแปรเก็บ (value)** เช่น int a = 42; ค่าที่เก็บคือ 42
- **ชื่อตัวแปร (variable name, variable)** ซึ่งเป็นชื่อเล่นของหน่วยความจำส่วนนั้น เช่น int a = 42; ชื่อตัวแปรคือ a
- **ที่อยู่ของหน่วยความจำ (address)** เป็นตัวเลขระบุถึงหน่วยความจำช่องต่างๆ สมมุติ RAM มีขนาด 1GB ([[$ 2^{30} $]], 1073741824 bytes) ก็จะมี address 1073741824 ช่อง อาจเปรียบเทียบให้ RAM เป็น [[[array]]] ขนาดยักษ์ โดยมี address เป็น index ซึ่ง address นี้จะมีค่าไม่แน่นอน ขึ้นอยู่กับว่าเมื่อมีการจองหน่วยความจำ ระบบปฏิบัติการจะจัดสรรหน่วยความจำ/address ใดให้ ตัวอย่าง address เช่น 41608 เป็นต้น (เลขมั่วนะครับ :P)
- **ชนิดข้อมูล** (**datatype**) เป็นชนิดข้อมูลของตัวแปร ชนิดข้อมูลต่างๆกันก็อาจจะมีขนาดชนิดข้อมูลต่างกัน เช่น int 4 byte, short 2 byte เป็นต้น และอาจประมวลผลข้อมูลต่างกัน (เช่น float กับ int ต่างมีขนาด 4 byte แต่ประมวลผลและจัดเก็บข้อมูลต่างกัน) ตัวอย่างชนิดข้อมูลเช่น int
+ การดำเนินการของที่อยู่หน่วยความจำ สมมุติ int a = 5; และ address ของ a เป็น __41608__ (ต่อไปนี้จะเขียน address โดยมีขีดเส้นใต้ เพื่อแยกแยะความแตกต่างของ address กับ value)
- **address-of / reference operator** (เครื่องหมาย **&**) เอาใช้กับ **variable** ได้ **address** คืนมา จากตัวอย่างจะได้ว่า &a => __41608__
- **dereference** (เครื่องหมาย *****) เอาไว้ใช้กับ **address** ได้ **variable** คืนมา จากตัวอย่างจะได้ว่า *(__41608__) => a
สังเกตว่า *(&a) => a
++ array กับ address ++ การดำเนินการทางคณิตศาสตร์กับ address
+ pointer + malloc / free