Tôi biết câu hỏi đã được trả lời, nhưng tôi không thể cưỡng lại việc chia sẻ lời giải thích này.
Tôi nhớ Nguyên tắc thiết kế trình biên dịch, Giả sử a là một mảng int và kích thước của int là 2, & Địa chỉ cơ sở cho a là 1000.
Làm thế nào a[5]
sẽ hoạt động ->
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
Giải thích này cũng là lý do tại sao các chỉ mục âm trong mảng hoạt động trong C.
tức là nếu tôi truy cập a[-5]
nó sẽ cho tôi
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
Nó sẽ trả về cho tôi đối tượng tại vị trí 990. Theo logic này, chúng ta có thể truy cập các chỉ mục âm trong Array in C.
somearray-2
là không xác định trừ khi kết quả nằm trong phạm vi từ đầusomearray
đến 1 sau khi kết thúc.