LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 1021|回复: 3

指向函数的指针,那函数的返回值为一个指针,该如何表达?

[复制链接]
发表于 2007-3-29 19:19:28 | 显示全部楼层 |阅读模式
按照我的理解,一个“指向函数的指针”应当形如:

int (*fp) () ; 这同时表明那个函数,有一个整型的返回值。


int *fn() ;
则定义了一个函数,该函数有一个返回值,此返回值是一个指向整型的指针。

我需要描述一个“指向函数的指针,那函数的返回值是一个指针,所返回的指针指向一个整型”
请问应该写成:
int *(*fp)() ;
还是写成:
int *((*fp)()) ;
抑或是写成:
(int *) (*fp)() ;

不好意思,我真的糊涂了!
请高人点拨一下,谢谢了!
发表于 2007-3-29 19:44:05 | 显示全部楼层
问题想不清时可以分解成几个小问题分明思考

首先考虑一个返回 XXX 型,带有 YYY 参数列表的函数 fn
XXX fn(YYY);

再来考虑一个返回 XXX 型,带有 YYY 参数列表的函数指针 fp
XXX (* fp)(YYY);

下面我们说,XXX 是一个整型指针,YYY 为 void,那么
int * (* fp)();
不就是楼主需要的了么

实际上,如果楼主理解
int (x);
完全等效于
int x;
那么楼主可以发现,
int * ((* fp)());
或者
int * ((* fp))();
也是正确的

但是
(int *)....
这种形式是错误的,编译的时候就会出现错误
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-3-30 05:41:13 | 显示全部楼层
授我以鱼,且授我以鱼。
多谢多谢!

或许今后,对于我,这一类的问题都容易解决些。
回复 支持 反对

使用道具 举报

发表于 2007-3-30 11:18:23 | 显示全部楼层
其实可以更简单一点。如果把int *定义成PINT就不用那么考虑复杂的关系了。
typedef int *PINT;
PINT (*fn)();
这个fn就是LZ想定义的东西。
碰见更复杂的东西一样可以按这种方法作,把简单类型包装成复杂类型,再一层一层定义上去。也给读code的人方便。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表