ฉันรู้ว่าคำถามมีคำตอบ แต่ฉันอดไม่ได้ที่จะแบ่งปันคำอธิบายนี้
ฉันจำหลักการออกแบบคอมไพเลอร์ได้สมมติว่า a คืออาร์เรย์ int และขนาดของ int คือ 2 และที่อยู่ฐานสำหรับ a คือ 1000
วิธีการa[5]
ทำงาน ->
Base Address of your Array a + (index of array *size of(data type for array a))
Base Address of your Array a + (5*size of(data type for array a))
i.e. 1000 + (5*2) = 1010
คำอธิบายนี้ยังเป็นเหตุผลว่าทำไมดัชนีเชิงลบในอาร์เรย์จึงทำงานใน C
คือถ้าฉันเข้าถึงa[-5]
มันจะให้ฉัน
Base Address of your Array a + (index of array *size of(data type for array a))
Base Address of your Array a + (-5 * size of(data type for array a))
i.e. 1000 + (-5*2) = 990
มันจะส่งคืนวัตถุให้ฉันที่ตำแหน่ง 990 โดยตรรกะนี้เราสามารถเข้าถึงดัชนีเชิงลบใน Array ใน C
somearray-2
ไม่ได้กำหนดไว้เว้นแต่ว่าผลลัพธ์จะอยู่ในช่วงจากจุดเริ่มต้นsomearray
ถึง 1 หลังจากจุดสิ้นสุด