2

我有一个函数getData(void* data) 应该将一些内部计算值复制到数据中,例如int r = getRadius(); r 应该复制到数据中,并且从函数 getData 返回的这种方法是什么正确的方法?我试过*(int*)data = r; 了,但我不确定这是最好的解决方案。

4

2 回答 2

7

如果您确定 void 指针引用的内存是 int,那么您可以确信

*(int *)data = r;

然而,更好的通用解决方案是:

memcpy(data, &r, sizeof(int));

这样您就不必担心字节对齐或其他潜在问题。

于 2012-05-18T18:15:59.333 回答
0

使用您展示的 API,我认为没有一个好的方法。dbeer 的解决方案确实有效,但 API 本身存在问题。

如果函数返回一个半径,它是一个整数,输出参数应该是int *
不过我想事情没那么简单。真正的函数更可能类似于getData(int what, void *data),其中的值what决定数据的类型。
这样的 API 不好,因为它会阻止编译器(以及您在阅读代码时)正确检查类型。

但如果你想坚持使用这个 API,至少添加一个 size 参数,并在写入data.

于 2012-05-23T06:21:17.197 回答