例如以下的代码片段:
int add(int a, int b)
{
return a + b;
}
void my_test(int *val, int (*func)(int, int))
{
int a = 100, b = 200;
*val = func(a, b);
}
void my_test2(int *val, ...)
{
int a = 100, b = 200;
int (*func)(int, int) = *(int (**)(int, int))(&val + 1);
*val = func(a, b);
}
int main(int argc, char **argv)
{
int val1 = 0, val2 = 0;
my_test(&val1, add);
printf("val1: %d\n", val1);
my_test2(&val2, add);
printf("val2: %d\n", val2);
return 0;
}
注意在my_test2中, 要用一个指向函数指针的指针来从栈上取值.
注:这里的做法是很不好的, 变参的函数还是用varargs来拿参数, 这里只是例子.