函数指针与变长参数列表

例如以下的代码片段:

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来拿参数, 这里只是例子.


原文地址:https://www.cnblogs.com/qsort/p/2053554.html