返回指向函数的指针问题!

wangyi0611 2009-12-02 04:28:57
具有函数类型的形参所对应的实参将被自动转换为指向相应函数类型的指针:
但是返回的是函数时,同样的转换操作则无法实现:

typedef int func(int *, int);

void f1(func); //ok

func f2(int); //error

func *f3(int); //ok

麻烦讲解一下!顺便举个实例:调用过程!
...全文
171 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
we_sky2008 2009-12-03
  • 打赏
  • 举报
回复
#include<iostream>

using namespace std;

typedef int (*pFunc)(int);
int double_x(int x)
{
return 2*x;
}

pFunc ret_func_ptr()
{
cout<<"函数ret_func_ptr返回函数double_x的指针"<<endl;
return double_x;
}

int main()
{
cout<<"调用ret_func_ptr返回的函数指针 计算double_x(123) = "
<<(ret_func_ptr())(123)<<endl;
return 0;
}
wolflion 2009-12-03
  • 打赏
  • 举报
回复
感觉文不对题啊,呵呵

指向函数的指针格式应该如5楼所说啊
tianhen730816 2009-12-03
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 cyblueboy83 的回复:]
引用 5 楼 sammylan 的回复:
函数指针类型不是这样定义的...
你应该这样定义
C/C++ codetypedefint (*func)(int*,int);
同意
[/Quote]
同意
飞天御剑流 2009-12-03
  • 打赏
  • 举报
回复
[Quote=引用楼主 wangyi0611 的回复:]
具有函数类型的形参所对应的实参将被自动转换为指向相应函数类型的指针:
但是返回的是函数时,同样的转换操作则无法实现:

typedef int func(int *, int);

void f1(func); //ok

func f2(int); //error

func *f3(int); //ok

麻烦讲解一下!顺便举个实例:调用过程!
[/Quote]

func是函数类型,不是函数指针类型,函数返回类型只能是void或者非数组类型的对象类型,不能是函数,因此func f2( int );是错误的。

6.9.1 Function definitions

The return type of a function shall be void or an object type other than array type.
herman~~ 2009-12-02
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 sammylan 的回复:]
函数指针类型不是这样定义的...
你应该这样定义
C/C++ codetypedefint (*func)(int*,int);
[/Quote] 同意
小小攻城师 2009-12-02
  • 打赏
  • 举报
回复
[Quote=引用楼主 wangyi0611 的回复:]
具有函数类型的形参所对应的实参将被自动转换为指向相应函数类型的指针:
但是返回的是函数时,同样的转换操作则无法实现:

typedef int func(int *, int);

void f1(func); //ok

func f2(int); //error

func *f3(int); //ok

麻烦讲解一下!顺便举个实例:调用过程!
[/Quote]
c++primer 楼主是要求甚解 我马马虎虎就过来了
void f1(func); 参数是函数类型 可直接转化为指针(默认)
func f2(int); 返回值是函数类型, 不可以的,因为函数名其实是一个指针。这个不能默认转换 所以需要第三种 即func *f3(int);
zkw0302 2009-12-02
  • 打赏
  • 举报
回复

#include <iostream.h> //输入输出

typedef int func(int *, int);

int GetSum( int* a, int b )
{
return (*a + b);
}

int GetMax(int* a, int b)
{
return *a>b?*a:b;
}

void f1(func f)
{
int a = 2;
int b = 3;
int k = f(&a , b);
cout<<k<<endl;
}

//func f2(int);


func *f3(int b)
{
if ( b == 0)
{
return GetSum;
}
else
{
return GetMax;
}
}


void main()
{
f1(GetSum);

func* p = f3(1);
int a = 3;
int k = p(&a,4);
cout<<k<<endl;
}
zkw0302 2009-12-02
  • 打赏
  • 举报
回复
#include

<iostream.h> //输入输出

typedef int func(int *, int);

int GetSum( int* a, int b )
{
return (*a + b);
}

int GetMax(int* a, int b)
{
return *a>b?*a:b;
}

void f1(func f)
{
int a = 2;
int b = 3;
int k = f(&a , b);
cout<<k<<endl;
}

//func f2(int);


func *f3(int b)
{
if ( b == 0)
{
return GetSum;
}
else
{
return GetMax;
}
}


void main()
{
f1(GetSum);

func* p = f3(1);
int a = 3;
int k = p(&a,4);
cout<<k<<endl;
}
SammyLan 2009-12-02
  • 打赏
  • 举报
回复
函数指针类型不是这样定义的...
你应该这样定义
typedef int (*func)(int *, int);
虾者 2009-12-02
  • 打赏
  • 举报
回复
哪有返回值是函数类型的??而且你给的程序太抽象了,没法帮你
wangyi0611 2009-12-02
  • 打赏
  • 举报
回复
就是举个实例:返回指向函数的指针!

顺便加点注释!
xladykiller 2009-12-02
  • 打赏
  • 举报
回复
up
healer_kx 2009-12-02
  • 打赏
  • 举报
回复
??

64,676

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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