使用malloc创建空间是否需要对返回值进行强制转换

先说结论,对是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()函数,必须对返回值进行强制装换,否则编译器将会报错无法编译。

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值