C/C++ 允許指針指向數組中間,然後使用負下標訪問前面的元素。關鍵在於指針運算:p[-k] == *(p - k)。
#include <iostream>
int main() {
int arr[1024];
for(int i=0;i<1024;++i) arr[i]=i;
int* mid = &arr[512]; // 指向中間
std::cout << mid[-256] << std::endl; // 輸出 256,即 arr[256]
// std::cout << arr[-256] << std::endl; // 未定義行為:超出數組邊界
return 0;
}
arr[i] 等價於 *(arr + i)mid 指向 &arr[512],所以 mid[-256] = *(mid - 256) = arr[256]arr[-256] 是未定義行為(指向數組前 256 字節)編譯器不檢查下標越界,運行時可能導致段錯誤或靜默數據損壞。僅在確定邊界安全時使用。