ในวันนี้เรามารู้จักกับ Pointer ในภาษาซีแบบหอมปากหอมคอกันเถอะ สำหรับใครที่คิดว่า Pointer ไม่สำคัญ คือคุณคิดผิดแล้ว
ตัวแปร Pointer ในภาษาไทยมีความหมายว่า ‘ตัวชี้’
แสดงว่าตัวแปร Pointer ต้องทำหน้าที่เกี่ยวกับการชี้อะไรสักอย่าง หรืออาจจะไม่ได้เกี่ยวข้องอะไรกันเลย เรามาดูกันเถอะ
Pointer เป็นตัวแปร และเป็นพระเอกในเรื่องนี้
Pointers
จากโค้ดหมายความว่า ประกาศตัวแปร n ชนิด integer มีค่าเท่ากับ 7 เราก็จะได้ผลลัพธ์ n = 7
&(ampersand) ที่อยู่หน้า n และ m หมายคถึง ที่ตั้งในหน่วยความจำของตัวแปร n ซึ่งแสดงผลเป็นเลขฐานสิบหก
ตัวแปร m และ n จะเก็บคนละที่ ซึ่งเราไม่จำเป็นต้องไปสนใจว่าเครื่องคอมพิวเตอร์ของเราจะเก็บตัวแปรเหล่านี้ไว้ที่ไหนในหน่วยความจำ เพราะขึ้นอยุ่กับ compiler หรือ ระบบปฏิบัติการที่เราใช้
การประกาศตัวแปร Pointer
ตัวแปร Pointer จะเก็บค่า address ของตัวแปร
ดังนั้นตอนประกาศตัวแปร เราต้องกำหนดว่าตัวแปร Pointer นี้ สามารถชี้ไปยังตัวแปรชนิดใด
การประกาศตัวแปรจะอ่านกลับหลัง
จาก int *ptr; เน้นย้ำว่า *ptr มีชนิดตัวแปรเป็น Pointer ไม่ใช่ Integer
Dereferencing a Pointer
เราเรียก *p1 ว่า Dereferencing คือ การนำค่าที่อยู่ใน address ที่โดนชี้ออกมา
ข้อดีของ Pointer
ถ้าเราอยากเปลี่ยนราคาสินค้าทั้งหมด ก็ปรับค่า price ที่เดียว แต่ถ้าเราไม่ใช้ Pointer ก็ต้องมาป้อนข้อมูลทีละชิ้น
สรุป
ถ้าเรามีตัวแปรหลายตัวชี้ไปยังหน่วยความจำเดียวกัน และค่าที่อยู่ในหน่วยความจำนั่นเปลี่ยน ตัวแปรเหล่านั้นก็จะเปลี่ยนค่าตามทั้งหมด