在這個問題 ,有人建議意見 ,我不應該投的結果malloc
,即 html
int *sieve = malloc(sizeof(int) * length);
而不是: 程序員
int *sieve = (int *) malloc(sizeof(int) * length);
爲何會這樣呢? 編程
強制轉換malloc
的結果不是強制性的,由於它返回void*
,而且void*
能夠指向任何數據類型。 編程語言
您進行強制轉換是由於: spa
type *
與type **
。 #include
適當的頭文件的想法錯過了樹木的森林 。 就像說「沒必要擔憂您沒有要求編譯器抱怨沒有看到原型的事實-討厭的stdlib.h是要記住的真正重要的事情!」 malloc()
錯誤的捕獲速度要快得多。 與斷言同樣,揭示意圖的註釋會減小錯誤。 返回的類型爲void *,能夠將其強制轉換爲所需的數據指針類型,以便將其取消引用。 指針
如今不須要malloc()
返回的值,可是我想補充一點,彷佛沒有人指出: code
在古代,也就是在ANSI C提供void *
做爲指針的通用類型以前, char *
是此類用法的類型。 在這種狀況下,強制轉換能夠關閉編譯器警告。 htm
參考: C常見問題解答 get
這取決於編程語言和編譯器。 若是在C中使用malloc
,則無需鍵入強制轉換,由於它將自動鍵入強制轉換。可是,若是您使用C ++,則應鍵入強制轉換,由於malloc
將返回void*
類型。 原型