mathieu 发表于 2008-4-21 19:24

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

一个菜鸟最近看到一段代码,觉得很是晦涩,麻烦大家帮忙看下<br /><br />typedef&nbsp;enum&nbsp;_ENUM_TYPE<br />{<br />&nbsp;&nbsp;&nbsp;a,b,c,...<br />}&nbsp;ENUM_TYPE;<br /><br />typedef&nbsp;struct&nbsp;_STRUCT_TYPE<br />{<br />&nbsp;&nbsp;&nbsp;int&nbsp;x;<br />&nbsp;&nbsp;&nbsp;char&nbsp;y;<br />&nbsp;&nbsp;&nbsp;int&nbsp;z;<br />&nbsp;&nbsp;&nbsp;...<br />}&nbsp;STRUCT_TYPE;<br /><br />typedef&nbsp;ENUM_TYPE&nbsp;(TYPE_A)(STRUCT_TYPE&nbsp;*var);<br /><br />TYPE_A&nbsp;*p;&nbsp;//请问这个指针该怎么理解?多谢!

dld2 发表于 2008-4-21 19:28

函数指针

bxb_lhj 发表于 2008-4-24 14:30

函数指针

typedef&nbsp;ENUM_TYPE&nbsp;(TYPE_A)(STRUCT_TYPE&nbsp;*var);<br /><br />TYPE_A&nbsp;*p;<br /><br />可以有如下调用<br /><br />ENUM_TYPE&nbsp;M;<br /><br /><br />M&nbsp;=&nbsp;P(var);

Swd21ic 发表于 2008-4-25 23:46

Re

我觉得错了..

宇宙飞船 发表于 2008-4-26 18:35

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

typedef&nbsp;ENUM_TYPE&nbsp;(TYPE_A)(STRUCT_TYPE&nbsp;*var);<br />作为函数指针的定义如:<br />1&nbsp;int&nbsp;(*fn)(int&nbsp;a,char&nbsp;b)//定义返回类型为整形,传递两个参数的函数指针fn.<br />2&nbsp;int&nbsp;(*fn)(struct&nbsp;*b)//定义返回类型为整形,传递一个结构首址的函数指针fn。<br />3&nbsp;ENUM_TYPE&nbsp;(*fn)(struct&nbsp;*b)&nbsp;//定义返回类型为枚举,传递一个结构首址函数指针。<br />4&nbsp;ENUM_TYPE&nbsp;(TYPE_A)(struct&nbsp;*b)&nbsp;//&nbsp;TYPE_A&nbsp;末列出,<br />;---------------------------------------------------------<br />假若:&nbsp;<br />typedef&nbsp;TYPE_A&nbsp;&nbsp;*fn&nbsp;&nbsp;;//就是以上的3式<br />假若:&nbsp;<br />typedef&nbsp;TYPE_A&nbsp;&nbsp;int&nbsp;&nbsp;;//就只能理解强制数据类型转换。

宇宙飞船 发表于 2008-4-26 23:37

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

假若:<br />typedef&nbsp;&nbsp;*fn&nbsp;&nbsp;TYPE_A&nbsp;&nbsp;;定义&nbsp;*fn&nbsp;的另一名字TYPE_A<br />假若:<br />typedef&nbsp;&nbsp;&nbsp;int&nbsp;&nbsp;TYPE_A&nbsp;;

hall919 发表于 2008-4-28 12:26

我觉得bxb_lhj是对的

M&nbsp;=&nbsp;p(var);<br />

Swd21ic 发表于 2008-4-28 21:53

Re:

我认为他的TYPE_A前忘了一个*.<br /><br />而且TYPE_A&nbsp;*p也有问题..&nbsp;<br />如果要定义一个函数指针类型的变量应该是&nbsp;TYPE_A&nbsp;p<br /><br />调用的时候也不像bxb_lhj说的.而是M&nbsp;=&nbsp;(*p)(var);

thw 发表于 2008-5-6 01:30

以前看的3点建议

别要考验自己的眼力<br />不要考验编译器的能力<br />不要考验同事的耐性

HWM 发表于 2008-5-6 08:13

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

C/C++本来就是相当简洁明了的程序设计语言,别人为地把它搞繁杂了。
页: [1]
查看完整版本: 请问这个指针该怎么理解?