首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C语言 >

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

2013-09-15 
请教下函数指针的地址和调用问题??代码如下:#include stdio.h#include stdlib.hvoid (*funP)(int)voi

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

#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)  

热点排行