函数指针与变长参数列表

例如以下的代码片段:

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


你可能感兴趣的:(函数指针)