簡體   English   中英

為什么“The C Programming Language”一書說我必須轉換 malloc?

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

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