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

C++ 多維陣列遍歷:下標法與指標法完整對比

     編輯:關於C++

測試陣列定義

int ia[3][4] = {
    {0, 1, 2, 3},
    {4, 5, 6, 7},
    {8, 9, 10, 11}
};

方法一:指標遍歷(效能最優)

int (*p)[4];  // 指向含 4 個 int 的陣列指標
for (p = ia; p != ia + 3; ++p)           // 遍歷列
    for (int *q = *p; q != *p + 4; ++q)  // 遍歷行
        std::cout << *q << std::endl;

關鍵點:

  • ia 退化為 int (*)[4],指向第一列。
  • *p 取得當前列的首元素地址(int*)。
  • 純指標運算,無下標檢查開銷,編譯器易優化為連續記憶體存取。

方法二:下標遍歷(可讀性最佳)

for (size_t i = 0; i != 3; ++i)
    for (size_t j = 0; j != 4; ++j)
        std::cout << ia[i][j] << std::endl;

現代 C++ 改良:範圍 for (C++11) 更簡潔安全:

for (auto& row : ia)
    for (auto& elem : row)
        std::cout << elem << std::endl;

效能與適用場景對比

維度指標法下標法範圍 for
執行速度最快(無邊界檢查)次之同下標法
程式碼清晰度較低高最高
維護風險高(手動管理邊界)中低(編譯器推導邊界)
適用場景效能關鍵路徑、C 風格介面一般業務邏輯現代 C++ 專案首選

進階:動態分配二維陣列遍歷

// 連續記憶體塊 + 指標陣列
int** arr = new int*[rows];
arr[0] = new int[rows * cols];
for (int i = 1; i < rows; ++i) arr[i] = arr[i-1] + cols;

// 此時指標法需調整:
for (int i = 0; i < rows; ++i)
    for (int j = 0; j < cols; ++j)
        std::cout << arr[i][j];  // 下標法通用性最強
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved