首页 > 其他分享 >使用malloc创建空间是否需要对返回值进行强制转换

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

时间:2023-03-11 15:44:18浏览次数:38  
标签:malloc 转换 void C++ 返回值 强制

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

 

标签:malloc,转换,void,C++,返回值,强制
From: https://www.cnblogs.com/shi-zhai/p/17206199.html

相关文章

  • 2023.03.10 - chrome调试工具的force state强制状态无效
    这是因为,选择的元素是没有对应state状态的,所以强制了也没有。比如:在一个span标签里使用了:hover,而span没有绑定hover状态,我们能点的动元素中的元素,是因为冒泡上去的父......
  • (P05)从C到C++:内联函数,带参数宏,4种强制类型转化
    文章目录​​1.内联函数​​​​2.4种新的类型转换运算符​​1.内联函数当程序执行函数调用时,系统要建立栈空间,保护现场,传递参数以及控制程序执行的转移等等,这些工作需要系......
  • 人人商城强制关闭微信授权登录
    1.core/inc/functions.phpif(!function_exists('is_weixin')){ functionis_weixin() { global$_W;returnfalse; if(EWEI_SHOPV2_DEBUG){ returntru......
  • ajax 返回值方法(php)
    <?phpfunctionmsg_error($state,$msg){if(!empty($_REQUEST['callback'])){$callback=$_REQUEST['callback'];$callback=preg_replace(array('......
  • 记录一个移动端图片预览(支持旋转),使用css强制旋转的坑
    注:我并没有解决只是换了一个插件,记录一下问题1、需求要支持图片预览和旋转,<1>我选择是vant组件自带的ImagePreview图片预览,用的css强制实现旋转,<2>出现的问题是样......
  • malloc--候捷老师
    内存分配:动态内存分配器维护着一个进程的虚拟内存区域,堆。设计:分段管理(方便归还group给操作系统),bitmap设计,多对双向链表负责不同大小内存块管理,嵌入式指针,缓式回收。......
  • 59.类的自动转换和强制类型转换
    程序清单11.16stonewt.h#pragmaonce//stone.h--Stonewt类声明#ifndefSTONEWT_H_#defineSTONEWT_H_classStonewt{private: enum{Lbs_per_stn=14};//poun......
  • win强制修改盘符导致oracle异常恢复----惜分飞
    联系:手机/微信(+8617813235971)QQ(107644445)标题:win强制修改盘符导致oracle异常恢复作者:惜分飞©版权所有[未经本人同意,不得以任何形式转载,否则有进一步追究法律责......
  • JavaScript 强制类型转换
    <!DOCTYPEhtml><html> <head> <metacharset="UTF-8"> <title></title> <scripttype="text/javascript"> /* *强制类型转换 * -指将一个数据......
  • python入门之函数返回值的应用
    """函数返回值应用"""#函数设计思想:#分而治之#干一件事#需求:定义两个数字相加的函数#defadd():#1.获取数据#number01=int(i......