ตัวชี้เทียบกับอาร์เรย์
ตัวชี้เป็นประเภทข้อมูลที่มีการอ้างอิงไปยังตำแหน่งหน่วยความจำ (เช่น ตัวแปรตัวชี้เก็บที่อยู่ของตำแหน่งหน่วยความจำซึ่งข้อมูลบางส่วนถูกเก็บไว้) อาร์เรย์เป็นโครงสร้างข้อมูลที่ใช้บ่อยที่สุดในการจัดเก็บชุดขององค์ประกอบ ภาษาโปรแกรมส่วนใหญ่มีวิธีการประกาศอาร์เรย์และเข้าถึงองค์ประกอบในอาร์เรย์อย่างง่ายดาย
ตัวชี้คืออะไร
ตัวชี้เป็นประเภทข้อมูลที่เก็บที่อยู่ของตำแหน่งหน่วยความจำที่เก็บข้อมูลบางส่วน กล่าวอีกนัยหนึ่ง ตัวชี้ถือการอ้างอิงไปยังตำแหน่งหน่วยความจำ การเข้าถึงข้อมูลที่เก็บไว้ในตำแหน่งหน่วยความจำที่อ้างอิงโดยตัวชี้เรียกว่า dereferenceเมื่อดำเนินการซ้ำๆ เช่น ข้ามต้นไม้/สตริง การค้นหาตาราง ฯลฯ การใช้พอยน์เตอร์จะช่วยเพิ่มประสิทธิภาพได้ นี่เป็นเพราะว่าการ Dereference และการคัดลอกพอยน์เตอร์นั้นถูกกว่าการคัดลอกและเข้าถึงข้อมูลที่ชี้โดยพอยน์เตอร์จริงๆ ตัวชี้ค่าว่างคือตัวชี้ที่ไม่ชี้ไปที่สิ่งใด ใน Java การเข้าถึงตัวชี้ null จะสร้างข้อยกเว้นที่เรียกว่า NullPointerException
อาร์เรย์คืออะไร
แสดงในรูปที่ 1 เป็นโค้ดที่ปกติใช้ในการประกาศและกำหนดค่าให้กับอาร์เรย์ รูปที่ 2 แสดงให้เห็นว่าอาร์เรย์จะมีลักษณะอย่างไรในหน่วยความจำ
int ค่า[5]; values[0]=100; values[1]=101; values[2]=102; values[3]=103; values[4]=104; |
ภาพที่ 1: รหัสสำหรับการประกาศและกำหนดค่าให้กับอาร์เรย์
100 | 101 | 102 | 103 | 104 |
ดัชนี: 0 | 1 | 2 | 3 | 4 |
รูปที่ 2: Array ที่เก็บไว้ในหน่วยความจำ
เหนือโค้ดกำหนดอาร์เรย์ที่สามารถเก็บจำนวนเต็มได้ 5 จำนวนและเข้าถึงได้โดยใช้ดัชนี 0 ถึง 4 คุณสมบัติที่สำคัญอย่างหนึ่งของอาร์เรย์คืออาร์เรย์ทั้งหมดได้รับการจัดสรรเป็นบล็อกหน่วยความจำเดียวและแต่ละองค์ประกอบจะได้รับ พื้นที่ของตัวเองในอาร์เรย์ เมื่อกำหนดอาร์เรย์แล้ว ขนาดของอาร์เรย์จะคงที่ ดังนั้น หากคุณไม่แน่ใจเกี่ยวกับขนาดของอาร์เรย์ในขณะคอมไพล์ คุณจะต้องกำหนดอาร์เรย์ที่ใหญ่พอที่จะอยู่ในด้านที่ปลอดภัย แต่โดยส่วนใหญ่แล้ว เราจะใช้องค์ประกอบน้อยกว่าที่เราจัดสรรไว้ ดังนั้นหน่วยความจำจำนวนมากจึงสูญเปล่าจริง ๆในทางกลับกัน ถ้า “อาร์เรย์ที่ใหญ่เพียงพอ” ไม่ใหญ่พอจริง ๆ โปรแกรมก็จะขัดข้อง
พอยน์เตอร์กับอาร์เรย์ต่างกันอย่างไร
ตัวชี้เป็นประเภทข้อมูลที่เก็บที่อยู่ของตำแหน่งหน่วยความจำซึ่งข้อมูลบางส่วนถูกจัดเก็บไว้ ในขณะที่ Array เป็นโครงสร้างข้อมูลที่ใช้บ่อยที่สุดในการจัดเก็บชุดขององค์ประกอบ ในภาษาการเขียนโปรแกรม C การจัดทำดัชนีอาร์เรย์ทำได้โดยใช้เลขคณิตของตัวชี้ (เช่น องค์ประกอบ ith ของอาร์เรย์ x จะเทียบเท่ากับ (x+i)) ดังนั้นใน C ชุดของพอยน์เตอร์ที่ชี้ไปยังชุดของตำแหน่งหน่วยความจำที่ต่อเนื่องกัน จึงถือได้ว่าเป็นอาร์เรย์ นอกจากนี้ยังมีความแตกต่างในวิธีที่ตัวดำเนินการ sizeof ทำงานบนพอยน์เตอร์และอาร์เรย์ เมื่อนำไปใช้กับอาร์เรย์ ตัวดำเนินการ sizeof จะคืนค่าขนาดทั้งหมดของอาร์เรย์ ในขณะที่เมื่อนำไปใช้กับตัวชี้ จะคืนค่าเพียงขนาดของตัวชี้