当前位置: 首页 > 知识库问答 >
问题:

为什么《C编程语言》一书说我必须铸造Malloc?

戚明朗
2023-03-14

今天,我读到了《C编程语言》(第二版Brian W.Kernighan&Dennis M.Ritchie)第167页,发现作者说我必须强制转换malloc。以下是书中的部分:

7.8.5存储管理

函数malloc和calloc动态地获取内存块。

void *malloc(size_t n)
void *calloc(size_t n, size_t size)
int *ip;
ip = (int *) calloc(n, sizeof(int));

共有1个答案

曾景龙
2023-03-14

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

在ANSI之前的C中--如K&R-1中所述--malloc()返回char*,在接收变量不是char*的所有情况下,都必须强制转换其返回值。标准C中新的void*类型使得这些扭曲变得不必要。

为了使任何人免于不必要地为K&R-2辩护的尴尬,我向丹尼斯·里奇征求了一个意见,我可以引用这个意见来证明上面从142页引用的句子的有效性。他回答说:

 类似资料:
  • 我知道不同的平台有不同的UI需求,但为什么我必须下载源代码并自己编译它呢?为什么我不能为我的平台下载一个可运行的版本?

  • 问题内容: 通常我会尽可能避免转换类型,因为我认为这是不良的编码实践,并且可能会导致性能下降。 但是,如果有人要我解释为什么会这样,我可能会像前灯中的鹿一样看它们。 那么,为什么/何时铸造不好? 它对于Java,C#,C ++是通用的,还是每个不同的运行时环境都按照自己的方式处理? 欢迎使用任何语言的细节,例如为什么在c ++中不好? 问题答案: 您已经用三种语言标记了这三种语言,答案在三种语言之

  • 正式学习 Python 之前,我们有必要先搞清楚【 编程语言】这个概念。 在我们很小的时候,父母就教我们开口说话,也教我们如何理解别人讲话的意思。经过长时间的熏陶和自我学习,我们在不知不觉中学会了说话,也能听懂其他小朋友说话的意思,于是我们开始用语言与他人交流。 世界上存在许多种语言,包括汉语、英语、日语、俄语等等,每种语言都有固定的格式,比如汉语(中国话),每个汉字代表着不同的意思,我们必须正确

  • 只是对造型和如何设置类变量感到困惑。在java中,这是可能的 现在我们在Kotlin了 错误:(65,24)智能转换为“ViewPager!”是不可能的,因为“mViewPager”是一个可变属性,此时可能已经更改

  • 问题内容: 我使用以下Dockerfile创建了一个Docker容器(已截断): 等等。 所有这些都可以,但是我的问题是软件包的安装方式/位置。 如果我仅使用rvm运行rvm,则会显示“无法找到rvm”,但是如果运行,它会起作用。(我在网上找到了“ -l -c”选项,但不知道它们的作用,也找不到令人满意的解释!) 这不是一个docker问题-这是一个bash / * nix问题-我认为存在一些关于

  • 本文向大家介绍什么是Perl编程语言?,包括了什么是Perl编程语言?的使用技巧和注意事项,需要的朋友参考一下 Perl是一种通用编程语言,最初是为文本处理而开发的,现在用于各种任务,包括系统管理,Web开发,网络编程,GUI开发等。 Perl是一种稳定的跨平台编程语言。 尽管Perl并不是正式的缩写,但很少有人将其用作实用提取和报告语言。 它用于公共和私营部门的关键任务项目。 Perl是一种开放