函数指针

 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 }

 

posted @ 2014-11-04 10:28  yyxayz  阅读(187)  评论(0编辑  收藏  举报