- char (*pFun)(int);
- char glFun(int a){ return;}
- void main()
- {
- pFun = glFun;
- (*pFun)(2);
- }
所以说pFun就是一个实实在在的指针变量,而不是一种类型
2.使用typedef更直观更方便
形式1:typedef 返回类型(*新类型)(参数表)
- typedef char (*PTRFUN)(int);
- PTRFUN pFun;
- char glFun(int a){ return;}
- void main()
- {
- pFun = glFun;
- (*pFun)(2);
- }
这时候的pFun还是一个实实在在的变量,但是用typedef搞出了一个等价类型PTRFUN ,就可以用这个PTRFUN 直接定义出函数指针变量了
* 结构体中的函数指针
我们首先定义一个名为Operation的函数指针:
typedef int (*Operation)(int a , int b );
再定义一个简单的名为STR的结构体
typedef struct _str { int result ; // 用来存储结果 Operation opt; // 函数指针 } STR;
现在来定义两个函数:Add和Multi:
//a和b相加 int Add (int a, int b){ return a + b ; } //a和b相乘 int Multi (int a, int b){ return a * b ; }
现在我们可以写main函数,并且将函数指针指向正确的函数:
int main (int argc , char **argv){ STR str_obj; str_obj.opt = Add; //函数指针变量指向Add函数 str_obj. result = str_obj.opt(5,3); printf (" the result is %d\n", str_obj.result ); str_obj.opt= Multi; //函数指针变量指向Multi函数 str_obj. result = str_obj.opt(5,3); printf (" the result is %d\n", str_obj.result ); return 0 ; }
这就是结构体中函数指针的用法,str_obj.opt(5,3);,跟c++的对象一样了,真好用,就可以仿造写出面向对象了