为什么书说我必须投malloc?

今天我到了C编程语言(第二版Brian W. Kernighan&Dennis M. Ritchie)的第167页,发现作者说我必须投入malloc 。 这是书中的一部分:

7.8.5存储pipe理

函数malloc和callocdynamic获取内存块。

 void *malloc(size_t n) 

返回一个指向未初始化存储的n个字节的指针,如果请求不能满足,则返回NULL。

 void *calloc(size_t n, size_t size) 

为指定大小的n个对象返回一个指向足够空闲空间的指针;如果请求不能满足,则返回NULL。 存储初始化为零。 malloc或calloc返回的指针对于所讨论的对象具有正确的alignment方式,但是必须将其转换为适当的types,如

 int *ip; ip = (int *) calloc(n, sizeof(int)); 

我已经知道malloc (和它的系列)返回typesvoid * ,并有很好的解释为什么不投出malloc

但是我的问题是:为什么这本书说我应该投它?

http://computer-programming-forum.com/47-c-language/a9c4a586c7dcd3fe.htm

在ANSI C之前 – 如K&R-1所述 – malloc()返回一个char *并且在接收variables不是char *所有情况下,都必须使用它的返回值。 标准C中新的void *types使得这些扭曲是不必要的。

为了避免任何人不必要的跳跃到K&R-2防御的尴尬境地,我问了丹尼斯·里奇(Dennis Ritchie)的意见,我可以引用第142页上面引用的句子的有效性。他回答说:

无论如何,现在我重读了p。 142,我认为这是错的; 它是这样写的,它不仅仅是对早期规则的防御,而是错误地expression了ANSI规则。