首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

typedef用以函数指针的难点

2013-03-12 
typedef用于函数指针的难点帮忙解答一下:为什么这句代码int (*Register (int (*pf) (const char*,const ch

typedef用于函数指针的难点
帮忙解答一下:
为什么
这句代码

int (*Register (int (*pf) (const char*,const char*)))(const char*,const char*);

和下面两句代码等价

typedef int (*pF)(const char*,const char*);
pF (*Register)(pF p);




特别那后者应该如何理解?
[解决办法]
typedef int (*pF)(const char*,const char*);
这是定义了一个返回值为int的函数指针pF,其参数为(const char*,const char*);



[解决办法]
你百度typedef去学习一下比较好。
[解决办法]
没什么不好理解的,第一个就是把第二个合成一体而已,自己想一下就明白了
[解决办法]
你为什么要去理解前者呢?前者无非就是把类型一层一层手工解开。这种方法本来就不应该用。你既然没有能力揭开,何必故意制造障碍然后麻烦别人给你解释

引用:
关键是为什么前者和后者相等。
发帖的时候发错了,特别是前者应该怎么理解?

对不起

[解决办法]
我最近也在学这个。我来说一下吧
首先
typedef int (*pF)(const char*,const char*);
pF (*Register)(pF p);
LZ你这个不对吧
我觉得应该是 pF Register(pF p);才对,
我做了测试,对Register赋值直接报“表达式需要是可修改的左值”,说明Register不是指针,而是函数名


解析过程就用那个“右左法则”
int (*Register (int (*pf) (const char*,const char*)))(const char*,const char*);
从Register向右看,看到一对括号(),说明Register是一个函数,括号里面的内容自然就是参数列表了
参数的类型int(*)(const char*,const char*)这是个最基本的函数指针形式,就不多说了

然后该向左看了,*,说明Register(已经确定它是一个函数了)返回一个指针,指针指向什么呢?跳出括号向右看,看到调用符号,说明指针指向函数
调用符号里面是参数列表(const char*,const char*)
这个函数的返回值是什么呢?向左看,int,说明这个函数返回值类型是int
整理一下,Register是一个函数声明,它的形参pf和返回值类型都是int(*)(const char*,const char*)

int(*)(const char*,const char*)太长了,就用typedef把它定义一下

热点排行