首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> C++ >> 關於C++

C/C++ 數組下標可以為負值——指針算術演示

     編輯:關於C++

現象說明

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 字節)

實際應用場景

  • 數組中間作為原點的對稱訪問(如圖像處理中心對稱)
  • 環形緩衝區索引轉換
  • 注意:必須確保結果指針仍在合法分配內存範圍內

警告

編譯器不檢查下標越界,運行時可能導致段錯誤或靜默數據損壞。僅在確定邊界安全時使用。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved