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

来源:互联网 发布:手机视频播放软件 编辑:程序博客网 时间:2024/05/13 19:40
  一直对函数指针的概念一知半解的,于是搜索了一把,发现几个帖子讲解不错,就帖子这里了.      

                                病例:不理解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)();我只能
      
问题我自己也被害了很久,最后扔了自己想通的。
病人:我的病好了,我回去也把扔了
 
原创粉丝点击