读书人

请问下函数指针的地址和调用有关问题?

发布时间: 2013-09-15 19:58:13 作者: rapoo

请教下函数指针的地址和调用问题??
代码如下:

#include <stdio.h>
#include <stdlib.h>

void (*funP)(int);
void myFun(int x)
{
printf("myFun: %d\n",x);
}
int main()
{
//一般的函数调用
myFun(100);

//myFun与funP的类型关系类似于int 与int *的关系。
funP=&myFun; //<-----------取地址赋值
(*funP)(2003);


funP=myFun;///<-------直接把变量赋值 ????? 这里为什么也可以?????
funP(300);
printf("myFun\t 0x%p=0x%p\n",&myFun,myFun); ////????取地址竟然和 取变量竟然一样??????
return 0;
}




我的困惑是 函数指针地址竟然和函数指针的变量是同一个,请问下为什么这样,编译器在其中做了什么,谢谢!
[解决办法]
引用:
哦,谢谢回复。
通常来讲,我对一个变量 取地址和取值是不一样的,这里为什么一样。

我的困惑是为什么一样,呵呵。


编译器把这两种写法同等看待,我们又何必纠结于这个问题呢,编译链接完成之后,生成的代码中,这两个不同的写法,都会相同的函数地址来替换,就这么简单.
代码说明一切!

00411455 call @ILT+300(__RTC_CheckEsp) (411131h)
printf("myFun\t 0x%p=0x%p\n",&myFun,myFun); ////????取地址竟然和 取变量竟然一样??????
0041145A mov esi,esp
0041145C push offset myFun (411050h) //是不是一样的,没区别吧??
00411461 push offset myFun (411050h)
00411466 push offset string "myFun\t 0x%p=0x%p\n" (41574Ch)

读书人网 >C语言

热点推荐