先说结论,对是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