簡體   English   中英

如何將void *轉換為int [] [3]

[英]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.

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