病例:不理解C/C++的函数指针

原文链接:http://blog.joycode.com/bigmonster/articles/4396.aspx

 

病人:医生,我折久,无法理解函数指
中医:能意到自己不理解,不。那说说你目前的理解。函数指是什
病人:函数指是指向函数的指

 

中医:函数是什
病人:函数就是函数。
中医:不是指向函数的指?
病人:自然不是。

 

中医:那函数怎可以赋值给函数指?int可以赋值给int* ?
病人:个。。。。。。

 

中医:逻辑不通了吧?
病人:是啊,怎回事哩?

 

中医:问题置一下,我你,什是指
病人:是放地址的量。
中医:函数指里面放的什
病人:函数入口地址。
中医:函数指就是放函数入口地址的量?
病人:  (小心地)我同意。
中医:函数是放函数入口地址的常量。
病人:!这样一来就好解!函数赋值给函数指就像把常量赋值给量!

 

中医:问题吗
病人:有,"函数是放函数入口地址的常量。"不通啊。
 函数是放自己入口地址的西?
中医:孺字可教。"函数入口地址"是一个,不能拆。真正的函数,无非是一
 C/C++中没有描述""西,
 只有描述""的入口地址的西,函数及函数指
病人:我懂了,"函数指是指向函数(1)的指""函数(2)不是指向函数(3)的指"的矛盾,
 出自"函数(1)"的是你"真正的函数"
 函数(2)(3)指的C/C++法意上的"函数",两事!
 
中医:,有道理。那么还问题吗     
病人:"函数指是指向函数的指"固然误导人,不C/C++法,也起到了推波助的作用。

 

#include 
typedef int (*FN_HAHA)();
int real_haha()
{
 return printf("haha/n");
}
 

void main(int argc, char* argv[])
{
 FN_HAHA haha=real_haha;
 real_haha();
 (*haha)(); 
}

 

既然  haha  real_haha是一个次上的西,
么调用的一个 "real_haha()",
一个(*haha)()哩?很明是在搞分化,搞子。

 

医生:C/C++法你都敢批的!
    正如你所不是好的法,所以在的编译器,比如VCgcc
    都允 haha();来代替传统(*haha)();44就知道了。
      至于上都写(*haha)();我只能
       问题我自己也被害了很久,最后扔了自己想通的。
病人:我的病好了,我回去也把扔了

 

posted @ 2014-07-16 00:08  mjsky  阅读(155)  评论(0)    收藏  举报