簡體   English   中英

將多維數組傳遞給函數?

[英]Passing multidimensional arrays to functions?

我有一個函數setPosition聲明為:

void setPosition(char ***grid, int a, int b) {
    int x = a / 8;
    int xbit = a % 8;
    int y = b;
    (*grid)[x][y] |= 1 << xbit;
}

在我的主要工作中,我有:

char grid[1000][1000];
setPosition(&grid, 10, 5);

但是我得到“警告:從不兼容的指針類型傳遞'setPosition'的參數1”。 為什么?

數組和指針的類型不同,即使數組在傳遞給函數時確實會衰減到指針 您可以更改方法簽名以獲取數組

void setPosition(char grid[][1000], Pos *p)

但是,如果您使用的是C ++, vector<vector<char> >將提供更好,更靈活的選擇。

除非它是sizeof或一元&運算符的操作數,或者是用於在聲明中初始化另一個數組的字符串文字,否則類型為“ T N元素數組”的表達式將轉換為/,並替換為/“ “衰減”到類型為“指向T指針”的表達式,其值是數組中第一個元素的地址。

如果您將函數稱為

setPosition(grid, 10, 5);

表達式grid類型將為char [1000][1000] ,根據上述規則,該類型將替換為char (*)[1000]類型的表達式,因此您的函數原型必須為

void setPosition(char (*grid)[1000], int a, int b) { ... }

要么

void setPosition(char grid[][1000], int a, int b) { ... }

在這種情況下是同一回事。

如果您將函數稱為

setPosition(&grid, 10, 5);

那么表達式&grid類型為char (*)[1000][1000] ,因此您的函數原型需要為

void setPosition(char (*grid)[1000][1000], int a, int b) { ... }

並且您需要在應用任何下標之前顯式地取消引用grid ,如

(*grid)[a][b] = ...;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM