函数指针
1 #include <stdio.h>
2 #include <stdlib.h>
3
4 int f(int);
5
6 int main(int argc, char *argv[])
7 {
8 int ans;
/*创建函数指针pf,该函数返回值为整型,并有一个整型的形参*/
9 int (*pf)(int);
10
11 /*下面两种写法都正确,&操作符是可选的,
12 *因为函数名被使用的时候总是有编译器把它转换成为函数指针,
13 *&操作符只是显示地说明了编译器将隐式执行的任务.
14 */
15 pf = f;
16 pf = &f;
17
18 /*简单地使用名字调用函数f,但它的执行过程可能和你想象的不太一样.
19 *函数名f首先被转换成一个函数指针,该指针指定函数在内存中的位置.
20 *然后,函数调用操作符调用该函数,执行开始于这个地址的代码.
21 */
22 ans = f(23);
23 printf("%d\n", ans);
24
25 /*对pf执行间接访问操作,它把函数指针转换成一个函数名.这个转换并不是真正需要的,
26 *因为编译器在执行函数调用操作符之前又会把它转换回去.
27 */
28 ans = (*pf)(43);
29 printf("%d\n", ans);
30
31 /*和前两条语句的效果是一样的.
32 *间接访问操作并非必要,因为编译器需要的是一个函数指针.
33 */
34 ans = pf(53);
35 printf("%d\n", ans);
36
37 return 0;
38 }
39
40 int f(int a)
41 {
42
43 return a + 10;
44
45 }