+ -
当前位置:首页 → 问答吧 → 函数的名称到底是什么?指针、地址?

函数的名称到底是什么?指针、地址?

时间:2010-09-07

来源:互联网

可以这样使用(C中)
  1. void f(){};
  2. void (* pf ) () =f
复制代码
也可以这样使用(c++中)
  1. class ClassName
  2. {
  3.     public:
  4.         void foo(int a){printf("foo%d\n",a);}
  5. };
  6. typedef void (ClassName::* FUNC)(int);

  7. FUNC ptr = &ClassName::foo;
复制代码
一个没加&,一个加了,为什么啊?

作者: ecjtubaowp   发布时间: 2010-09-07

回复 ecjtubaowp


    我觉得和变量名字 和int a一样;

作者: 梅川内依酷   发布时间: 2010-09-07

波粒二象性~~

作者: Roemer   发布时间: 2010-09-07

赞同2楼。

C那段,按理说是应该加&的,不过C对这个处理很灵活,不加也不会错。使用函数指针,pf()和(*pf)(),理论上应该是后一种,但前一种一样不会出错,而且看起来更自然。

作者: liwangli1983   发布时间: 2010-09-07

函数名是汇编里一个代码片断的标识。相当于goto 里的标签。也代表代码片断的第一条指令的存放的地址。
如:
  1. test:
  2.         pushl        %ebp
  3.         movl        %esp, %ebp
  4.         subl        $16, %esp
  5.         movl        $1, -4(%ebp)
  6.         movl        -4(%ebp), %eax
  7.         leave
  8.         ret
  9.         .size        test, .-test
复制代码
函数的指针里存放着函数名标识的代码片段中的首地址。
  1. int (*f)(void) = test;
复制代码
在汇编里是这么实现的。
  1. movl        $test, -8(%ebp)
复制代码
  1. (*f)();
  2.     f();
复制代码
调用相当于:
  1. movl        -8(%ebp), %eax
  2. call        *%eax
复制代码

作者: zhangsuozhu   发布时间: 2010-09-07

还是懂点汇编好。

作者: ecjtubaowp   发布时间: 2010-09-07

函数名就是该函数的首址

作者: ahui886   发布时间: 2010-09-07

回复 ahui886


    有道理。就是这样

作者: zhangsuozhu   发布时间: 2010-09-07

相关阅读 更多

热门下载

更多