[英]how to cast void* to int[][3]
我需要將int[][3]
類型的變量傳遞給一個回調函數,該函數只接受void*
作為參數。 我怎樣才能做到這一點?
以下代碼無法編譯:
void myfunc(void *param) {
int i[][3];
i=*param;
printf("%d\n",i[1][2]);
}
int main(int argc, char *argv[])
{
int i[][3]={
{1, 2, 3},
{4, 5, 6},
{7, 8, 9}};
myfunc(i);
}
采用:
int (*i)[3] = param;
然后像以前一樣使用它。 這是一個指向整數數組的指針。
詳細解答:
main()
的i
類型是int[3][3]
,一個數組數組。 int[3][3]
的類型為int[3]
。 int(*)[3]
類型的數組指針,所以這就是當你輸入myfunc(i)
時i
最終的結果。 int(*)[3]
是在函數內部使用的正確類型。 int (*i)[3];
在函數內部,然后訪問i[x]
將給出數組數組中的數組x
。 i[x][y]
會給你數組編號x
,項目編號y
。 因此,語法最終與直接訪問2D數組時的語法相同。 同樣,您可以將函數寫為void myfunc(int param[3][3])
。 Param會隱式地衰減到指針int(*)[3]
“在行之間”,允許你在函數內部使用param[x][y]
。 它看起來只是數組按值傳遞,但它不是 - 在C中這樣做是不可能的。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.