เนื่องจากมีหลายๆคนสงสัย และมองว่ามันยาก ในการจัดการเกี่ยวกับ Array แล้วก็งงกับ มันไปเกี่ยวอะไรกับ Pointer อีก
คำถามแรกต้องถามก่อนว่า เรามี Array ไว้ทำอะไร
Array มองง่ายๆ ก็คือเป็นกลุ่มของข้อมูลชนิดเดียวกัน หรือก็คือเป็นกลุ่มของตัวแปรที่มีชนิดเดียวกันนั้นเอง มีเอาไว้เก็บข้อมูลเหมือนตัวแปรนั้นแหละครับ เช่น เราบอกว่าเราต้องการเก็บคะแนนของนักเรียนทั้งหมด 40 คนในห้องเรียนนี้ ถ้าเรายังไม่รู้ว่ามี Array อยู่ในโลกเนี่ย เราก็จะต้องประกาศตัวแปรถึง 40 ตัว แต่ถ้าเรารู้แล้ว ก็ประกาศเพียงแค่ Array 1 ตัวเท่านั้น
Pointer and Address
โดยทั่วไปหน่วยความจำ(Memory)ของคอมพิวเตอร์ นั่นจะเป็นช่อง(ในมุมมองของ logical view)ที่ถูกระบุหมายเลขที่อยู่(Address)เอาไว้เรียงต่อกัน โดยช่องต่างๆเหล่านี้ สามารถถูกนำมาใช้อย่างเดี่ยวๆ หรือ นำมาใช้อย่างเป็นกลุ่มๆ ก็ได้ เช่น ชนิดตัวแปรอักขระ(char) สามารถแทนได้ด้วย Memory cell 1 ไบท์, ชนิดตัวแปรสั้น(short) สามารถแทนได้ด้วย Memory cell จำนวน 2 ไบท์(a pair of one-byte cell) หรือ Memory cells จำนวน 4 ไบท์ ติดกันใช้แทนชนิดข้อมูล Integer หรือ long
Pointer คือ กลุ่มของ Memory cells ที่ใช้เก็บ Address
ถ้าให้ ตัวแปร c เป็น char และ ตัวแปร p เป็น Pointer ที่ชี้มายัง c แล้วเราสามารถแทนเหตุการณ์แบบนี้ด้วยรูปภาพด้านล่าง
& เป็น Unary Operator ที่ใช้ในการดึง Address ของวัตถุหนึ่ง ดังนั้น code ที่ใช้แทนเหตุการณ์ด้านบนคือ
p = &c; // assigns the address of c to the variable p ,and p is said point to c
*คือ indirection หรือ dereferencing operator เมื่อ apply operator นี้กับ pointer นั่นคือ การเข้าถึงวัตถุภายในหน่วยความจำที่ Pointer ตัวที่ถูก Apply * ชี้อยู่
การประกาศ pointer จำเป็นต้องระบุ ชนิดข้อมูลที่ pointer นี้สามารถชี้ไปได้
pointer สามารถใช้ไปยังชนิดข้อมูลที่เฉพาะเจาะจงได้เท่านั้น แต่มีอยู่ type หนึ่งคือ เมื่อประกาศ pointer ว่าให้ชี้ไปยังชนิด "void" แล้ว pointer ตัวนั้นจะสามารถชี้ไปยังทุก ชนิดข้อมูลได้ แต่ pointer ตัวนั้นจะไม่สามารถถูกทำการ dereference ได้
ไม่มีความคิดเห็น:
แสดงความคิดเห็น