【发布时间】:2016-05-31 04:38:40
【问题描述】:
给定一个函数as(它可以在内部使用malloc())as void* function_ptr(void *ptr, int size);
其中void *ptr 是一个空指针,size 是数字,作为回报,它应该根据数据类型分配内存。对于int,它应该分配4*size(considering 32 bit),对于char1*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);
【问题讨论】:
-
#define allocate(pret, len) malloc((len) * sizeof *(pret))?如果你把它转换成void*,唯一的(而且是不可移植的,有时是错误的)就是假设sizeof(*ptr) == _Alignof(*ptr)。 -
你的面试问题是什么?
-
@ashish 这个问题真的没有意义。它说的是“数据类型”,但根本不清楚应该是什么类型。我会用“数据类型什么?”来回答这个问题
-
上述问题的意义为零。要么你记错了,要么面试官做得不够好,委婉地说。
-
可能是个技巧问题?这似乎是唯一合乎逻辑的答案,一旦将指针传递给该函数,它就会被强制转换(如果不是手动强制转换)为 void *。从函数内部无法检测到它最初指向的数据类型。
标签: c