首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

C語言三維數組作為函數參數的四種傳遞方式

     編輯:程式設計疑難解答

場景

定義 uint8_t cube[5][5][5];,需傳入函數處理並返回結果。

四種形參寫法(等價)

  1. 完整維度:void process(uint8_t cube[5][5][5]);
  2. 首維省略:void process(uint8_t cube[][5][5]);
  3. 指向二維數組的指針:void process(uint8_t (*cube)[5][5]);
  4. 扁平化指針 + 尺寸參數(最靈活):
    void process(uint8_t *cube, int dim1, int dim2, int dim3);
    // 調用
    process(&cube[0][0][0], 5, 5, 5);
    // 或強轉
    process((uint8_t*)(void*)cube, 5, 5, 5);
    

內存佈局解析

三維數組在內存中連續存儲,按最後一維最快變化(行主序)。cube[i][j][k] 偏移量 = (i * D2 * D3 + j * D3 + k) * sizeof(uint8_t)。方式 4 手動計算偏移,適用於運行時才知維度的場景。

函數內部訪問示例(方式 2/3)

void process(uint8_t cube[][5][5]) {
    for (int i = 0; i < 5; i++)
        for (int j = 0; j < 5; j++)
            for (int k = 0; k < 5; k++)
                cube[i][j][k] ^= 0xFF;  // 直接按下標訪問
}

避坑指南

  • 不要寫 uint8_t ***cube —— 三維數組不是**三級指針。
  • 若需修改數組內容,不加 const;唯讀請加 const。
  • 跨文件調用時,聲明與定義維度須一致,或統一用方式 4。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved