Chinaunix首页 | 论坛 | 博客
  • 博客访问: 480544
  • 博文数量: 144
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 1190
  • 用 户 组: 普通用户
  • 注册时间: 2013-10-08 20:16
文章分类

全部博文(144)

文章存档

2017年(1)

2015年(5)

2014年(108)

2013年(30)

我的朋友

分类: C/C++

2014-07-12 22:11:13


点击(此处)折叠或打开

  1. #include <stdio.h>
  2. typedef int (*p1)(int ,int);
  3. //p1先与*结合,为指针变量,又与后面的括号结合,表示该指针指向一个函数
  4. //p1为指向一个函数的指针,指向函数的形参为两个int类型变量,返回值为int类型

  5. int max(int m1,int m2)
  6. {
  7.     return (m1>m2)?m1:m2;
  8. }
  9. int min(int m11,int m12)
  10. {
  11.     return (m11>m12)?m12:m11;
  12. }
  13. p1 f(int (*p2)(int ,int),int (*p3)(int ,int ),int a)//p1为一个函数指针,所以函数f返回值为一个指向函数的指针
  14. //函数f的形参有三个,前两个为指向函数的指针,第三个为一个int变量
  15. {
  16.   return a?p2:p3;//a如果大于0则返回p2指向的函数地址,否则返回p3指向的函数地址
  17. }

  18. void main()
  19. {
  20.  int x=10,y=20;
  21.  int m1=6,m2=5;
  22. int a=0;


  23.  printf("%d\n",(*f(max,min,a))(x,y));//调用函数f,传入max和min两个函数地址,根据a的值返回其中一个函数地址。然后返回地址再与*结合作为一个函数,
  24. //最后再与后面括号结合,xy为其传入的参数
  25.  printf("%d\n",f(max,min,a)(x,y));//这样调用和上面调用结果是一样的,这个和还有待继续研究
  26. }

阅读(649) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~