请问这个指针该怎么理解?

[复制链接]
 楼主| mathieu 发表于 2008-4-21 19:24 | 显示全部楼层 |阅读模式
一个菜鸟最近看到一段代码,觉得很是晦涩,麻烦大家帮忙看下

typedef enum _ENUM_TYPE
{
   a,b,c,...
} ENUM_TYPE;

typedef struct _STRUCT_TYPE
{
   int x;
   char y;
   int z;
   ...
} STRUCT_TYPE;

typedef ENUM_TYPE (TYPE_A)(STRUCT_TYPE *var);

TYPE_A *p; //请问这个指针该怎么理解?多谢!
dld2 发表于 2008-4-21 19:28 | 显示全部楼层

函数指针

bxb_lhj 发表于 2008-4-24 14:30 | 显示全部楼层

函数指针

typedef ENUM_TYPE (TYPE_A)(STRUCT_TYPE *var);

TYPE_A *p;

可以有如下调用

ENUM_TYPE M;


M = P(var);
Swd21ic 发表于 2008-4-25 23:46 | 显示全部楼层

Re

我觉得错了..
宇宙飞船 发表于 2008-4-26 18:35 | 显示全部楼层

楼主没有给出TYPE_A的内容,无从考证,

typedef ENUM_TYPE (TYPE_A)(STRUCT_TYPE *var);
作为函数指针的定义如:
1 int (*fn)(int a,char b)//定义返回类型为整形,传递两个参数的函数指针fn.
2 int (*fn)(struct *b)//定义返回类型为整形,传递一个结构首址的函数指针fn。
3 ENUM_TYPE (*fn)(struct *b) //定义返回类型为枚举,传递一个结构首址函数指针。
4 ENUM_TYPE (TYPE_A)(struct *b) // TYPE_A 末列出,
;---------------------------------------------------------
假若: 
typedef TYPE_A  *fn  ;//就是以上的3式
假若: 
typedef TYPE_A  int  ;//就只能理解强制数据类型转换。
宇宙飞船 发表于 2008-4-26 23:37 | 显示全部楼层

上面有点BUG,把这调过来才正确。

假若:
typedef  *fn  TYPE_A  ;定义 *fn 的另一名字TYPE_A
假若:
typedef   int  TYPE_A ;
hall919 发表于 2008-4-28 12:26 | 显示全部楼层

我觉得bxb_lhj是对的

M = p(var);
Swd21ic 发表于 2008-4-28 21:53 | 显示全部楼层

Re:

我认为他的TYPE_A前忘了一个*.

而且TYPE_A *p也有问题.. 
如果要定义一个函数指针类型的变量应该是 TYPE_A p

调用的时候也不像bxb_lhj说的.而是M = (*p)(var);
thw 发表于 2008-5-6 01:30 | 显示全部楼层

以前看的3点建议

别要考验自己的眼力
不要考验编译器的能力
不要考验同事的耐性
HWM 发表于 2008-5-6 08:13 | 显示全部楼层

楼上的三点建议经典,赞一个!

C/C++本来就是相当简洁明了的程序设计语言,别人为地把它搞繁杂了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则

17

主题

28

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部

17

主题

28

帖子

0

粉丝
快速回复 在线客服 返回列表 返回顶部