<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
<channel>
<title><![CDATA[向东博客 专注WEB应用 构架之美 --- 构架之美，在于尽态极妍 | 应用之美，在于药到病除]]></title> 
<link>http://www.jackxiang.com/index.php</link> 
<description><![CDATA[赢在IT，Playin' with IT,Focus on Killer Application,Marketing Meets Technology.]]></description> 
<language>zh-cn</language> 
<copyright><![CDATA[向东博客 专注WEB应用 构架之美 --- 构架之美，在于尽态极妍 | 应用之美，在于药到病除]]></copyright>
<item>
<link>http://www.jackxiang.com/post//</link>
<title><![CDATA[病例:不理解C/C++的函数指针 ]]></title> 
<author>jack &lt;xdy108@126.com&gt;</author>
<category><![CDATA[WEB2.0]]></category>
<pubDate>Thu, 29 Nov 2007 10:30:35 +0000</pubDate> 
<guid>http://www.jackxiang.com/post//</guid> 
<description>
<![CDATA[ 
	病人:医生，我折腾了许久，无法理解函数指针。<br/>中医:能意识到自己不理解，不错。那么你说说你目前的理解。函数指针是什么？<br/>病人:函数指针是指向函数的指针。<br/><br/>中医:那么函数是什么？<br/>病人:函数就是函数。<br/>中医:不是指向函数的指针?<br/>病人:自然不是。<br/><br/>中医:那函数怎么可以赋值给函数指针?难道int可以赋值给int* ?<br/>病人:这个。。。。。。<br/><br/>中医:逻辑不通了吧？<br/>病人:是啊，怎么回事哩？<br/><br/>中医:这个问题先搁置一下，我问你，什么是指针？<br/>病人:是放地址的变量。<br/>中医:函数指针里面放的什么？<br/>病人:函数入口地址。<br/>中医:那么函数指针就是放函数入口地址的变量？<br/>病人: &nbsp;(小心地)我同意。<br/>中医:函数是放函数入口地址的常量。<br/>病人:哇!这样一来就好解释了!函数赋值给函数指针就像把常量赋值给同类型变量！<br/><br/>中医:还有问题吗？<br/>病人:有，"函数是放函数入口地址的常量。"这句话不通啊。<br/> 函数是放自己入口地址的东西？<br/>中医:孺字可教。这里"函数入口地址"是一个词，不能拆。真正的函数，无非是一块代码，<br/> C/C++中没有描述"一块代码"的东西，<br/> 只有描述"一块代码"的入口地址的东西，函数及函数指针。<br/>病人:我懂了，"函数指针是指向函数(1)的指针"和"函数(2)不是指向函数(3)的指针"的矛盾，<br/> 出自"函数(1)"的是你刚才说的"真正的函数"，<br/> 函数(2)(3)指的C/C++语法意义上的"函数"，两码事！<br/> <br/>中医:嗯，有道理。那么还有问题吗？ &nbsp; &nbsp; <br/>病人:"函数指针是指向函数的指针。"这句话固然误导人，不过C/C++的语法，也起到了推波助澜的作用。<br/><br/>//////////////////////////////////<br/>#include <br/>typedef int (*FN_HAHA)();<br/>int real_haha()<br/>&#123;<br/> return printf("haha&#92;n");<br/>&#125;<br/><br/>void main(int argc, char* argv[])<br/>&#123;<br/> FN_HAHA haha=real_haha;<br/> real_haha();<br/> (*haha)(); <br/>&#125;<br/>//////////////////////////////////<br/><br/>既然 &nbsp;haha 和 real_haha是一个层次上的东西，<br/>那么调用的时候为什么 一个 "real_haha()；",<br/>一个(*haha)()哩？很明显是在搞分化，搞脑子。<br/><br/>医生:连C/C++语法你都敢批评，强的！<br/> &nbsp; &nbsp;正如你所说，这不是好的语法，所以现在的编译器，比如VC和gcc，<br/> &nbsp; &nbsp;都允许用 haha()；来代替传统的(*haha)();你44就知道了。<br/> &nbsp; &nbsp; &nbsp;至于书上都写(*haha)();我只能说，<br/> &nbsp; &nbsp; &nbsp; 这个问题我自己也被书害了很久，最后扔了书自己想通的。<br/>病人:我的病好了，我回去也把书扔了。<br/>
]]>
</description>
</item><item>
<link>http://www.jackxiang.com/post//#blogcomment</link>
<title><![CDATA[[评论] 病例:不理解C/C++的函数指针 ]]></title> 
<author> &lt;user@domain.com&gt;</author>
<category><![CDATA[评论]]></category>
<pubDate>Thu, 01 Jan 1970 00:00:00 +0000</pubDate> 
<guid>http://www.jackxiang.com/post//#blogcomment</guid> 
<description>
<![CDATA[ 
	
]]>
</description>
</item>
</channel>
</rss>