主题:typedef简化声明
ys198835
[专家分:0] 发布于 2011-11-07 22:51:00
int (*Register (int (*pf)(const char *, const char *)))(const char *, const char *);
如何用typedef进行简化。
详细过程...
回复列表 (共3个回复)
沙发
bruceteen [专家分:42660] 发布于 2011-11-08 08:46:00
typedef int (*PF)( const char*, const char* );
PF Register( PF pf );
板凳
alphalab [专家分:0] 发布于 2011-11-08 14:54:00
这个声明看了眼晕
3 楼
windy0will [专家分:2300] 发布于 2011-11-09 14:33:00
一看开头 int (*Register ( 就应该可以知道这是一个函数,返回另一个函数指针。
接着有2中思路来考虑:从函数Register的返回值 和 参数 分别来考虑这个函数.
拿 从返回值的角度来考虑 来举例:
把 *Register (int (*pf)(const char *, const char *)) 看着一个整体,用foo表示,
那么原来的声明可以写成 int foo (const char *, const char *);
也就是说,Register函数的返回值 是一个指向 foo类型函数的指针。这样有
typedef int (*PF) (const char *, const char *);
于是,Register可以化简为 PF Register ( int (*pf) (const char *, const char *) );
很显然,Register 函数的参数也是一个函数指针.类型是 int (*) (const char *, const char * );
而这个函数指针和PF的类型刚好一样,故总体来讲,可以把Register写成这样:
PF Register (PF);
我来回复