给定一个函数(它可以在内部使用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);
答案 0 :(得分:0)
您无法从函数内部了解数据类型,因为没有可用的类型信息。有两种选择:
1)使函数在 bytes 中的大小上工作,然后它不需要知道类型。也许这实际上是面试官的意思?
2)重写该函数,使其在某处包含类型信息。
还有一些不好的选择,例如使用全局变量或用包装器宏替换函数,但不推荐使用。