[英]Why does "The C Programming Language" book say I must cast malloc?
今天我翻到了The C Programming Language(第二版 Brian W. Kernighan & Dennis M. Ritchie)的第167頁,發現作者說我必須轉換malloc
。 以下是書中的部分:
7.8.5 存儲管理
函數 malloc 和 calloc 動態獲取內存塊。
void *malloc(size_t n)
返回一個指向 n 字節未初始化存儲的指針,如果不能滿足請求,則返回 NULL。
void *calloc(size_t n, size_t size)
返回一個指向足夠空閑空間的指針,用於指定大小的 n 個對象的數組,如果不能滿足請求,則返回 NULL。 存儲被初始化為零。 malloc 或 calloc 返回的指針與所討論的對象具有正確的對齊方式,但必須將其強制轉換為適當的類型,如
int *ip; ip = (int *) calloc(n, sizeof(int));
我已經知道malloc
(及其系列)返回類型void* ,並且有很好的解釋為什么不malloc
。
但我的問題是:為什么這本書說我應該投它?
來自http://computer-programming-forum.com/47-c-language/a9c4a586c7dcd3fe.htm :
在 ANSI C 之前——如 K&R-1 中所述—— malloc() 返回一個
char *
並且在接收變量不是char *
所有情況下都必須轉換其返回值。 標准 C 中的新void *
類型使這些扭曲變得不必要。為了讓任何人免於不必要地為 K&R-2 辯護的尷尬,我向丹尼斯·里奇征求了意見,我可以引用上面引用的第 142 頁句子的有效性。他回答說:
無論如何,現在我重讀了 p. 上的內容。 142,我覺得不對; 它的編寫方式不僅是針對早期規則的防御,而且還歪曲了 ANSI 規則。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.