函数指针与变长参数列表
例如以下的代码片段:
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来拿参数, 这里只是例子.