【发布时间】:2017-07-04 19:12:59
【问题描述】:
我正在尝试通过使用void * 的函数传递参数以提供任何类型的参数。但是由于某些我不明白的原因,函数内部无法读取数据。
这是公司职能的复制行为。 Live on Coliru
#include <stdio.h>
typedef struct
{
double d1, d2;
} S;
double doStuff(void ** args)
{
double * a = (double*)args;
printf("a[0] = %lf\n", a[0]);
printf("a[1] = %lf\n", a[1]);
double r = a[0] + a[1];
return r;
}
int main(void) {
S s;
s.d1 = 10.0;
s.d2 = 10.0;
S* ptr = &s;
void* args[2];
args[0] = &ptr->d1;
args[1] = &ptr->d2;
double d = doStuff(args);
printf("d = %lf\n", d);
return 0;
}
它的输出
a[0] = 0.000000
a[1] = 0.000000
d = 0.000000
【问题讨论】:
-
void **不与void *相同。 -
搞笑:我得到
a[0] = 0.000000 a[1] = 10.000000 d = 10.000000 -
@Jean-FrançoisFabre 使用 gcc 或 clang 吗?
-
gcc在我的情况下。 -
double * a = (double*)args;-->double a[] = { *(double*)args[0], *(double*)args[1] };(试试%lf-->%f)