Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2339118
  • 博文数量: 168
  • 博客积分: 3184
  • 博客等级: 中校
  • 技术积分: 3959
  • 用 户 组: 普通用户
  • 注册时间: 2009-05-12 18:57
文章存档

2019年(1)

2018年(2)

2017年(3)

2016年(15)

2015年(10)

2014年(60)

2011年(1)

2010年(76)

分类: LINUX

2010-03-30 19:29:15

typedef int (*pfun)(int x,int y);
解析:
这里的pfun是一个使用typedef自定义数据类型。它表示一个函数指针,其参数有两个,都是int类型,返回值也是int类型。可以按如下步骤使用:
1     typedef int (*pfun)(int x,int y);
2     int fun(int x, int y);
3     pfun p = fun;
4     int ret = p(2, 3);
简单说明:
q        第1行定义了pfun类型,表示一个函数指针类型。
q        第2行定义了一个函数。
q        第3行定义了一个pfun类型的函数指针p,并赋给它fun的地址。
q        第4行调用p(2, 3),实现fun(2, 3)的调用功能。
答案:
定义了一个函数指针类型表示指向返回值为int,且同时带2个int参数的函数指针类型了。可以用这种类型来定义函数指针来调用相同类型的函数。
 
 
 
 
***********************************************************************
函数指针,顾名思义,它指向一个函数的入口地址,其定义及使用如下:
定义:returntype (*ptr) (typename variable,......)
返回类型 指针名称 指向函数的参数表。
你不能这样: returntype *ptr (typename variable,......) 这样会被理解为一个函数的定义。 你需要知道,函数名并不是函数类型的一部分,所以对于函数指针来说,函数的返回类型和参数表是很重要的。这两个东西要与函数指针完全匹配。
你定义了函数:int cal(int a,int b) int get(int a,int b)
定义函数指针:int (*ptr)(int ,int);
初始化:
int (*ptr)(int ,int)=cal;
int (*ptr)(int,int)=&cal; 将ptr赋值为cal函数,这两种是等价的。
调用:
int val1=3,val2=4;
ptr(val1,val2);
(*ptr)(val1,val2); 这两种调用方式也是完全等价的。

  
不用初始化的方法,用返回函数指针的方法
void * get_cal(int (*ptr)(int ,int))
{
teturn ptr;
}
调用get_cal(&cal)就可以返回cal函数的入口地址
阅读(3941) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~