malloc的通用函数接受所有数据类型

时间:2016-05-31 04:38:41

标签: c

给定一个函数(它可以在内部使用malloc())作为void* function_ptr(void *ptr, int size);

其中void *ptr是一个空指针,size是数字,作为回报,它应该根据数据类型分配内存。对于int,它应该分配4*size(considering 32 bit)char 1*size。 例如,

表示整数数据类型function_ptr((void *)some_int_ptr, 10 )
它应该分配10 *4(32 bit) = 40 bytes
function_ptr((void *)some_char_ptr, 10 ),应分配10个字节

问题是我们如何将void *类型转换为int / char / double指针,因为函数不知道哪个数据类型被强制转换为void*

这是一个面试问题,我尝试回复发送1个参数,提到数据类型,因此我们可以分配和分配内存,但不被接受为

void* function_ptr(void *ptr, int size, int data_type);

1 个答案:

答案 0 :(得分:0)

您无法从函数内部了解数据类型,因为没有可用的类型信息。有两种选择:

1)使函数在 bytes 中的大小上工作,然后它不需要知道类型。也许这实际上是面试官的意思?

2)重写该函数,使其在某处包含类型信息。

还有一些不好的选择,例如使用全局变量或用包装器宏替换函数,但不推荐使用。