转自: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 | } |