关于函数指针定义

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

如果是void * fp(void);我还可以理解。应该是这个fp函数的返回值是void*. 上面这个前面加个typedef.很不解。。。
...全文
401 9 打赏 收藏 转发到动态 举报
写回复
用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*类型的函数。不过我看到它是把这个东西当做另一个函数的参数之一的,函数的参数如果是参数,我觉得类型应该是函数指针类型的吧。这个定义并不是函数指针类型的意思。所以不解。。。

69,369

社区成员

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

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