Hello Pointers in C. How are you?

ChaV
2 min readAug 25, 2020

--

ในวันนี้เรามารู้จักกับ Pointer ในภาษาซีแบบหอมปากหอมคอกันเถอะ สำหรับใครที่คิดว่า Pointer ไม่สำคัญ คือคุณคิดผิดแล้ว

ตัวแปร Pointer ในภาษาไทยมีความหมายว่า ‘ตัวชี้’

แสดงว่าตัวแปร Pointer ต้องทำหน้าที่เกี่ยวกับการชี้อะไรสักอย่าง หรืออาจจะไม่ได้เกี่ยวข้องอะไรกันเลย เรามาดูกันเถอะ

Pointer เป็นตัวแปร และเป็นพระเอกในเรื่องนี้

Pointers

ตัวอย่าง 1
ผลลัพธ์

จากโค้ดหมายความว่า ประกาศตัวแปร n ชนิด integer มีค่าเท่ากับ 7 เราก็จะได้ผลลัพธ์ n = 7

&(ampersand) ที่อยู่หน้า n และ m หมายคถึง ที่ตั้งในหน่วยความจำของตัวแปร n ซึ่งแสดงผลเป็นเลขฐานสิบหก

ตัวแปร m และ n จะเก็บคนละที่ ซึ่งเราไม่จำเป็นต้องไปสนใจว่าเครื่องคอมพิวเตอร์ของเราจะเก็บตัวแปรเหล่านี้ไว้ที่ไหนในหน่วยความจำ เพราะขึ้นอยุ่กับ compiler หรือ ระบบปฏิบัติการที่เราใช้

การประกาศตัวแปร Pointer

ตัวแปร Pointer จะเก็บค่า address ของตัวแปร

ดังนั้นตอนประกาศตัวแปร เราต้องกำหนดว่าตัวแปร Pointer นี้ สามารถชี้ไปยังตัวแปรชนิดใด

การประกาศตัวแปรจะอ่านกลับหลัง

ตัวแปร ptr ชนิด Pointer สามารถเก็บตำแหน่งในหน่วยความจำชนิด integer (ptr is a pointer to int)

จาก int *ptr; เน้นย้ำว่า *ptr มีชนิดตัวแปรเป็น Pointer ไม่ใช่ Integer

การประกาศตัวแปรรูปแบบต่างๆ

Dereferencing a Pointer

ตัวอย่าง 2
ผลลัพธ์

เราเรียก *p1 ว่า Dereferencing คือ การนำค่าที่อยู่ใน address ที่โดนชี้ออกมา

ตัวอย่าง 3
ผลลัพธ์

ข้อดีของ Pointer

ตัวอย่าง 4
ผลลัพธ์

ถ้าเราอยากเปลี่ยนราคาสินค้าทั้งหมด ก็ปรับค่า price ที่เดียว แต่ถ้าเราไม่ใช้ Pointer ก็ต้องมาป้อนข้อมูลทีละชิ้น

สรุป

ถ้าเรามีตัวแปรหลายตัวชี้ไปยังหน่วยความจำเดียวกัน และค่าที่อยู่ในหน่วยความจำนั่นเปลี่ยน ตัวแปรเหล่านั้นก็จะเปลี่ยนค่าตามทั้งหมด

--

--

ChaV
ChaV

Written by ChaV

Christmas Weerachitoragarn | PSU | Enginearing |

No responses yet