我有一个功能getData(void* data)
应该将一些内部计算值复制到数据中
例如int r = getRadius();
r应该被复制到数据,并且是从函数getData返回的方式
这样做的正确方法是什么?
我试过*(int*)data = r;
但我不确定这是一个最好的解决方案。
答案 0 :(得分:7)
如果您确定void指针引用的内存是int,那么您可以对
充满信心*(int *)data = r;
然而,更好的通用解决方案是:
memcpy(data, &r, sizeof(int));
这样您就不必担心字节对齐或其他潜在的陷阱。
答案 1 :(得分:0)
我不认为使用您展示的API有一个很好的方法。 dbeer的解决方案当然有效,但API本身存在问题。
如果函数返回半径(整数),则输出参数应为int *
。
我想这不是那么简单。真实函数更像是getData(int what, void *data)
,其中what
的值决定了数据的类型
这样的API并不好,因为它会阻止编译器(以及您在阅读代码时)正确检查类型。
但是如果您希望坚持使用此API,请至少添加一个尺寸参数,并在写入data
之前对其进行验证。