请教下函数指针的地址和调用问题??
代码如下:
#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)