如何让函数指针能指向任意函数?如何保存可变参数?
如题,先看下面的示例代码:
#include<stdio.h>int max(int x,int y) /* 声明一个函数 */{ return(x > y ? x : y); } void main() { int (*ptr)(int, int);/* 声明一个函数指针 */ int a,b,c; ptr = max;/* 将func函数的首地址赋给指针f */ scanf("%d%d",&a,&b); c=(*ptr)(a,b); printf("a=%d,b=%d,max=%d",a,b,c);}
int a(int n, char *s){ //省略代码}int b(char *in, char *out, int n){ //省略代码}int main(){ char str[100], ss[200]; int n, m; int (*ptr_a)(XXXXXX), (*ptr_b)(XXXXXX);/* 如何声明这两个函数指针? */ /* save_func函数支持不定参数,并且能保存这些参 * 数,等调用run_func函数时,就会调用函数指针 * 指向的函数,并将保存的这些参数传给这个函数 */ save_func( ptr_a, a, n, str); save_func( ptr_b, b, str, ss, m); run_func(ptr_a); run_func(ptr_b);}
/*LZ所说的,实在没想好.. 下面是用共同体写的,算是一个思路吧, 当将某个函数赋值给共同体中的一个函数指针成员后,就可以通过共同体中 其他与函数参数相同的函数名调用*/#include <iostream>using namespace std;void Show(){ cout<<"Show()"<<endl;}void Add(int a, int b){ cout<<"a + b = "<<a + b<<endl;}void PrintStr(char* ch){ cout<<ch<<endl;}typedef void (*PShow)(void);typedef void (*PAdd)(int a, int b);typedef void (*PPrintStr)(char *ch);union FunPtr{ PShow fun1; PAdd fun2; PPrintStr fun3;};int main(int argc, char* argv[]){ int a = 3; int b = 4; char* str = "Hello World!"; FunPtr fun; fun.fun1 = (PShow)Show; fun.fun1(); fun.fun1 = (PShow)Add; fun.fun2(a, b); fun.fun1 = (PShow)PrintStr; fun.fun3(str); system("pause"); return 0;}
[解决办法]