函数指针与回调

来源:互联网 发布:昌盛软件游戏机 编辑:程序博客网 时间:2024/06/06 07:04

1.通用函数

  1 # include <stdio.h>  2 # include <string.h>  3   4 void fun(int x);  // void fun(int);  5   6 int main(void)  7 {  8     fun(10);                                                                         9  10     return 0; 11 } 12  13 void fun(int x) 14 { 15     printf("%d\n", x); 16 }

2.函数指针变量的声明

# include <stdio.h>  2 # include <string.h>  3   4 void fun(int x);  // void fun(int);  5 void (*Pfun)(int );  6   7 int main(void)  8 {  9     //写法一 10     Pfun = &fun; 11     (*Pfun)(1); 12     //写法二 13     Pfun = fun; 14     (Pfun)(2); 15     //写法三 16     Pfun = &fun; 17     (Pfun)(3); 18     //写法四 19     Pfun = fun; 20     (*Pfun)(4); 21  22     return 0;                                                                       23 } 24  25 void fun(int x) 26 { 27     printf("%d\n", x); 28 }
四种写法都可以正常运行

MyFun的函数名与FunP函数指针都是一样的,即都是函数指针。MyFun函数名是一个函数指针常量,而FunP是一个函数数指针变量,这是它们的关系。
但函数名调用如果都得如(*MyFun)(10);这样,那书写与读起来都是不方便和不习惯的。所以C语言的设计者们才会设计成又可允许MyFun(10);这种形式地调用
FunP函数指针变量也可以FunP(10)的形式来调用
在函数的申明处:
void MyFun(int );    //不能写成void (*MyFun)(int )。
void (*FunP)(int );   //不能写成void FunP(int )。
调用指针
# include <stdio.h># include <string.h>void fun1(int x);void fun2(int x);void fun3(int x);typedef void (*pfun)(int );void callfun(pfun, int);int main(void){callfun(fun1, 1);callfun(fun2, 2);callfun(fun3, 3);return 0;}void callfun(pfun fp, int x){(*fp)(x);}void fun1(int x){printf("%d\n", x);}void fun2(int x){printf("%d\n", x);}void fun3(int x){printf("%d\n", x);}






0 0