2010-06-04 27 views
8

我發現這個例子的代碼,我試圖谷歌什麼(int (*)[])var1可以代表,但我沒有有用的結果。(int(*)[])var1代表什麼?

#include <unistd.h> 
#include <stdlib.h> 

int i(int n,int m,int var1[n][m]) { 
    return var1[0][0]; 
} 

int example() { 
    int *var1 = malloc(100); 
    return i(10,10,(int (*)[])var1); 
} 

通常我在沃拉斯C99工作,所以我習慣:

#include <unistd.h> 
#include <stdlib.h> 

int i(int n,int m,int var1[n][m]) { 
    return var1[0][0]; 
} 

int example() { 
    int var1[10][10]; 
    return i(10,10,var1); 
} 

謝謝!

回答

11
+3

偉大的參考網站! – xtofl 2010-06-04 09:51:48

+0

我打算推薦'cdecl'工具,很高興看到它的web前端:) – crazyscot 2010-06-04 12:29:20

+1

我很困惑 - 沒有像「int數組」那樣的類型。數組類型必須具有大小,即使它是可變的。這種類型在演員中使用真的有效嗎?如果是這樣,這是什麼意思?什麼是'sizeof *(int(*)[])0'? – 2010-11-11 04:18:18

0

(int (*)[])是指向數組int s的指針。相當於int[n][m]函數的參數。

這是C語言中的一個常見習慣用法:首先做一個malloc來保留內存,然後將其轉換爲所需的類型。

+0

我認爲你應該重新解釋你的答案,因爲'int [] []'不是有效的C語法,它仍然不清楚你的意思。 – Jens 2011-05-20 21:17:00

+0

你爲什麼要從malloc投出回報?它是一個指向void的指針,可以將它指定給任何指針類型,而不需要用C語言強制轉換(在C++中,首先不使用malloc,而是new)。 – Jens 2011-05-21 08:12:00

+0

@Jens:我應該閉嘴:)我不是C大師,所以我只能解釋代碼的意思,而不是看它應該讀什麼。 – xtofl 2011-05-21 09:02:19

1

這是一個指向int數組的指針的類型轉換。