Chinaunix首页 | 论坛 | 博客
  • 博客访问: 63961
  • 博文数量: 12
  • 博客积分: 469
  • 博客等级: 二等列兵
  • 技术积分: 155
  • 用 户 组: 普通用户
  • 注册时间: 2012-05-24 22:00
文章分类

全部博文(12)

文章存档

2014年(2)

2012年(10)

分类: C/C++

2012-05-25 16:59:09

什么是函数指针,函数指针就是定义一个指针变量,它的值指向函数的入口地址。就可以用这个变量调用函数。
看一个链接 写的很详细。
用指针调用函数:
fun(int a){printf("%d\n", a);}
void main()
{
        int (*p)(int);    /*定义函数指针*/
        p = fun;            /*把fun的地址赋值给p*/
        (*p)(1);              /*用指针调用函数*/
}
 在对函数指针赋值时 如p =fun; 不能在函数名后面加上(), 如: p = fun(); 会报woring 提示类型不对。因为p=fun()语句是把fun()函数的返回值赋值给p,fun()函数的返回值为int型,而 p为函数指针型。
使用typedef宏会更直观:
 /*typedef 返回类型(*新类型)(参数表);*/
typedef int (*PFUN)(int);   /*PFUN为指向一个函数指针类型,typedef 后的";"不要忘了*/
main()
{
       PFUN p;     /*定义*/
       p = fun;
       (*p)(2);

函数名和函数指针的关系:
还是前面的函数和变量看一下这几条语句能不能通过:
 p(1)   /*直接用函数指针变量代替函数名*/
 (fun)(2)  /*用函数名*/
可以通过;
而且 p = fun; 或 p= &fun; 都可以
那么 printf("%x, %x", fun, &fun);
会发现两个地址相同。
 函数指针和函数名都是函数指针,函数名是个指针常量,而函数指针是个指针变量

 参考 : 
阅读(1256) | 评论(0) | 转发(0) |
0

上一篇:没有了

下一篇:list.h

给主人留下些什么吧!~~