我有一个将传递void指针的函数。该指针可以是int,char或float。我知道将通过关联值传递给我的数据类型。例如,下面是我的函数:
void * (int type, void * data);
如果我传递的void指针最初是一个char类型,并且我将它转换回char类型,有没有办法确定与该指针相关的字节数?例如,如果我的函数调用如下:
f(1, (void *)"Hello world");
我将void指针强制转换为char指针
char * p = (char *)data;
有什么方法可以弄清楚使用了多少字节?我是否可能必须搜索空字符并计算它与原始指针相距多少字节?我还需要做些什么才能找到int和float的大小?
答案 0 :(得分:2)
我是否可能必须搜索空字符并计算方式 它距离原始指针多少个字节?
是的,如果您的void*
实际上是char*
,这将有效。
我还需要做些什么才能找到int和float的大小?
int
和float
始终具有相同的大小(取决于您的体系结构,通常为32或64位。使用sizeof
运算符来确定确切的大小)。如果你将一个int数组作为void*
传递,你无法找到它的长度。
通常在这些情况下,将大小传递给你的函数也很有意义。