关于函数指针定义

yilin54 2009-05-21 05:15:02
typedef void (*fp)(void);这样的定义方式我见过,应该是说定义个函数指针类型,它指向的函数的参数和返回值都是void。
下面这个定义我点不理解:
typedef void * fp(void);

如果是void * fp(void);我还可以理解。应该是这个fp函数的返回值是void*. 上面这个前面加个typedef.很不解。。。
...全文
408 9 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
yilin54 2009-05-22
  • 打赏
  • 举报
回复
原来typedef void fun(void)和typedef void (*fun)(void)类似的,他们都是定义一函数类型,参数和返回值都是void.
用法示例:
#include <stdio.h>
int swap(int a ,int b)
{
if(a>b)
return a;
else
return b;
}

typedef int fun(int ,int); //定义一个已经存在的swap函数类型。

int t_swap(int a,int b, fun fun_swap ) //注意这里的 fun fun_swap
{
int res=fun_swap(a,b);

printf("%d",res);
return res;
}

main()
{
int temp;
temp=t_swap(5,6,swap); //注意这里直接填了swap
}




直接当参数的用法:
#include <stdio.h>
int swap(int a ,int b)
{
if(a>b)
return a;
else
return b;
}
int t_swap(int a,int b, int (*fun)(int ,int)) //直接把swap的指针传进去
{
int res=fun(a,b);

printf("%d",res);
return res;
}

main()
{
int temp;
temp=t_swap(5,6,swap); //注意这里直接填了swap
}
yilin54 2009-05-22
  • 打赏
  • 举报
回复
谁能回答我在7楼的疑问啊。。。
yilin54 2009-05-21
  • 打赏
  • 举报
回复
哦。那可以它声明的函数做实参吗? 比如 void fun(fp p);这个fp就是typedef void * fp(void);
[Quote=引用 6 楼 lingyin55 的回复:]
不能当实参,它只是一种类型。

引用 5 楼 yilin54 的回复:
这种类型可以直接用来当某一个函数的实参吗? 好像是不行的吧....

引用 3 楼 lingyin55 的回复:
就只是一种类型,一般这样定义都是为了在后面的使用中能够简洁方便。

引用 1 楼 yilin54 的回复:
typedef void * fp(void); 难道是说定义了一个参数是void类型,返回值是void*类型的函数。不过我看到它是把这个东西当做另一个函数的参数之一的,函数的参数…
[/Quote]
lingyin55 2009-05-21
  • 打赏
  • 举报
回复
不能当实参,它只是一种类型。

[Quote=引用 5 楼 yilin54 的回复:]
这种类型可以直接用来当某一个函数的实参吗? 好像是不行的吧....

引用 3 楼 lingyin55 的回复:
就只是一种类型,一般这样定义都是为了在后面的使用中能够简洁方便。

引用 1 楼 yilin54 的回复:
typedef void * fp(void); 难道是说定义了一个参数是void类型,返回值是void*类型的函数。不过我看到它是把这个东西当做另一个函数的参数之一的,函数的参数如果是参数,我觉得类型应该是函数指针类型的吧。这个定义并不是函…
[/Quote]
yilin54 2009-05-21
  • 打赏
  • 举报
回复
这种类型可以直接用来当某一个函数的实参吗? 好像是不行的吧....

[Quote=引用 3 楼 lingyin55 的回复:]
就只是一种类型,一般这样定义都是为了在后面的使用中能够简洁方便。

引用 1 楼 yilin54 的回复:
typedef void * fp(void); 难道是说定义了一个参数是void类型,返回值是void*类型的函数。不过我看到它是把这个东西当做另一个函数的参数之一的,函数的参数如果是参数,我觉得类型应该是函数指针类型的吧。这个定义并不是函数指针类型的意思。所以不解。。。
[/Quote]
机智的呆呆 2009-05-21
  • 打赏
  • 举报
回复
typedef void * fp(void); //定义一个函数声明

#include<iostream>
using namespace std;
typedef void * fp();
fp f1;
fp f2;
int main()
{
f1();
f2();
}
void * f1()
{
cout<<"f1..."<<endl;
}
void * f2()
{
cout<<"f2..."<<endl;
}

lingyin55 2009-05-21
  • 打赏
  • 举报
回复
就只是一种类型,一般这样定义都是为了在后面的使用中能够简洁方便。

[Quote=引用 1 楼 yilin54 的回复:]
typedef void * fp(void); 难道是说定义了一个参数是void类型,返回值是void*类型的函数。不过我看到它是把这个东西当做另一个函数的参数之一的,函数的参数如果是参数,我觉得类型应该是函数指针类型的吧。这个定义并不是函数指针类型的意思。所以不解。。。
[/Quote]
lingyin55 2009-05-21
  • 打赏
  • 举报
回复
typedef void * fp(void);

如果是void * fp(void);我还可以理解。应该是这个fp函数的返回值是void*. 上面这个前面加个typedef.很不解。。。


一样的,这里定义的是一个类型fp。
yilin54 2009-05-21
  • 打赏
  • 举报
回复
typedef void * fp(void); 难道是说定义了一个参数是void类型,返回值是void*类型的函数。不过我看到它是把这个东西当做另一个函数的参数之一的,函数的参数如果是参数,我觉得类型应该是函数指针类型的吧。这个定义并不是函数指针类型的意思。所以不解。。。
访问真八字排盘系统介绍: 1、八字排盘 八字排盘是将年月日时按照天干地支的形式进行排列,一个时间单位代表了一个柱。八字由年柱、月柱、日柱和时柱共四个柱组成,也被称为四柱八字。八字学中基于中国阴阳五行、天干地支与刑冲克害、以及民间盲派的神煞论等方式,进一步预测爱情顺遂、工作高低、姻缘好坏、财富高低、学业成就、身体健康等事的学问。 八字排盘由以下元素组合:年月日时四柱、大运干支、胎元 、流年干支、十神、地势、神煞等。生辰八字不只是把干支历计算出来,而还要遵守月令、节令的强弱,时辰的阴阳变化进行校正。排盘分析,就是根据出生者的性别、天干地支的阴阳五行关系、进一步推算出来的一套方法论,给预测者做人生吉凶的参考数据,在未来事业、财运、婚姻、家庭等问题时,能做出风险较低的决策。 八字排盘怎么看 八字排盘由年、月、日、时四柱组成,每柱包含一个天干和一个地支,共八个字。年柱代表出生的年份,月柱代表出生的月份,日柱代表出生的日期,时柱则代表出生的时辰。每个柱的干支组合都会对个人的命运产生影响。天干地支旁边标注的正财、偏财、偏印、正印、比肩、劫财、食神、伤官、正官、七杀等,称为十神。 2、八字排盘软件介绍 我们是腾讯云市场金牌合作伙伴,广州正规软件开发公司,开发的八字排盘系统数据最全面精准,我们八字排盘采用最精确的排盘程序,而且运用“真太阳时”,进行更精确的时间划分。大家都知道我们使用的北京时间,是统一规定的标准时间。而八字排盘需要相对于太阳方位的天文时间,即平太阳时。我们国家地大物博,北京时间19时,哈尔滨已经夜幕降临,而新疆却还是太阳高挂,这时哈尔滨的天文时间可能在20:00以后,而新疆的天文时间可能在16时以前。北京时间是东经120度经线的平太阳时,如果您出生地的经度与北京时间所处的经度差异较大,或者处于单数时间点的前后,比如6点差一刻,8点,10点15分等

70,023

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧