转自:http://my.oschina.net/kaixindewo/blog/16320
01 |
#include<stdio.h> |
02 |
//
方法指针的格式为:int (*ptr)(char *p) 即:返回值(指针名)(参数列表) |
03 |
04 |
typedef int (*CallBackFun)( char *p); //
为回调函数命名,类型命名为 CallBackFun,参数为char *p |
05 |
06 |
07 |
08 |
09 |
//
方法 Afun,格式符合 CallBackFun 的格式,因此可以看作是一个 CallBackFun |
10 |
int Afun( char *p) |
11 |
12 |
{ |
13 |
14 |
printf ( "Afun
回调打印出字符%s!\n" ,
p); |
15 |
16 |
return 0; |
17 |
18 |
} |
19 |
20 |
21 |
22 |
//
方法 Bfun,格式符合 CallBackFun 的格式,因此可以看作是一个 CallBackFun |
23 |
int Cfun( char *p) |
24 |
25 |
{ |
26 |
27 |
printf ( "Cfun
回调打印:%s, Nice to meet you!\n" ,
p); |
28 |
29 |
return 0; |
30 |
31 |
} |
32 |
33 |
34 |
35 |
//
执行回调函数,方式一:通过命名方式 |
36 |
int call(CallBackFun
pCallBack, char *p) |
37 |
38 |
{ |
39 |
40 |
printf ( "call
直接打印出字符%s!\n" ,
p); |
41 |
42 |
pCallBack(p); |
43 |
44 |
return 0; |
45 |
46 |
} |
47 |
48 |
//
int call2(char *p, int (*ptr)(char *p)) |
49 |
50 |
//
执行回调函数,方式二:直接通过方法指针 |
51 |
int call2( char *p, int (*ptr)()) |
52 |
53 |
{ |
54 |
55 |
printf ( "==============\n" ,
p); |
56 |
57 |
(*ptr)(p); |
58 |
59 |
} |
60 |
61 |
62 |
63 |
//
执行回调函数,方式一:通过命名方式 |
64 |
int call3( char *p,
CallBackFun pCallBack) |
65 |
66 |
{ |
67 |
68 |
printf ( "--------------\n" ,
p); |
69 |
70 |
pCallBack(p); |
71 |
72 |
} |
73 |
74 |
75 |
76 |
int main() |
77 |
78 |
{ |
79 |
80 |
char *p
= "hello" ; |
81 |
call(Afun,
p); |
82 |
83 |
call(Cfun,
p); |
84 |
85 |
call2(p,
Afun); |
86 |
87 |
call2(p,
Cfun); |
88 |
89 |
call3(p,
Afun); |
90 |
91 |
call3(p,
Cfun); |
92 |
93 |
//
int i = getchar(); |
94 |
95 |
//
printf("Input: %c \n", i); |
96 |
97 |
return 0; |
98 |
99 |
} |