先说结论,对是malloc()函数的返回值是否进行强制转换取决于程序的编译环境。在C中,强制转化是在画蛇添足;在C++中强制转换是必须的。

如果说在C环境和C++环境之间进行移植,建议还是对其进行强制转换。

函数malloc()的定义为:

void *malloc(size_t size)

其中size -- 内存块的大小,以字节为单位

使用时,需要包含 stdlib.h头文件

在C环境中

C 标准定义了 void* 指针作为泛型指针。意味着 void* 指针能够不经转换,就可以直接赋值给任何类型的指针(函数指针除外)。

因此,对于malloc()函数的返回值void*,不需要进行强制转换就能够进行赋值。

当然,并不是说在C环境下,对malloc()返回值进行强制转换就会产生编译错误。例如下面这行代码依旧能够使用。

s =(int *)malloc(sizeof(int));

但其返回值为void*不使用强制转换是因为其有一定的优点。

打个比方,若果说有一段程序原本使用malloc()函数分配一个内存空间来存储整型int数据。现在对其进行移植用来存储浮点型double数据。如果原程序使用malloc()函数时进行了强制转换,那么在进行移植时,就需要对其进行改动。毕竟一个整型的内存空间去存储浮点型数据难免会产生bug。但是在C环境下,使用malloc()函数不对返回值进行强制转换,那在移植过程中就不需要对该部分进行改动,会减少一些不必要的工作量。

总而言之,在C环境下使用malloc()函数对返回值进行强制装换可以,但没必要

在C++环境中

C++是强类型语言。在C++中,只有在“加宽”时才允许隐式转换。即,如果新类型可以保存旧类型所能保存的每个值。

因此,在C++中,允许从较小的整数类型转换为较大的整数类型;允许从任何指针类型转换为void*。而所有其他类型转换都必须显式进行,从而告诉编译器“我知道我在做什么,这不是错误”。

因此在C++中,使用malloc()函数,必须对返回值进行强制装换,否则编译器将会报错无法编译。

GitHub 加速计划 / ma / mall
54
14
下载
mall项目是一套电商系统,包括前台商城系统及后台管理系统,基于SpringBoot+MyBatis实现,采用Docker容器化部署。 前台商城系统包含首页门户、商品推荐、商品搜索、商品展示、购物车、订单流程、会员中心、客户服务、帮助中心等模块。 后台管理系统包含商品管理、订单管理、会员管理、促销管理、运营管理、内容管理、统计报表、财务管理、权限管理、设置等模块。
最近提交(Master分支:4 个月前 )
f9add0f8 - 2 天前
83abb8e1 - 2 天前
Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐