函数指针的地址问题
VC++6.0环境:
#include <iostream>
using namespace std;
int func(int i)
{
cout<<i<<"in func"<<endl;
return 0;
}
int main()
{
int (*p)(int);
p=func;
cout<<p<<endl;
cout<<func<<endl;
cout<<*p<<endl;
cout<<&func<<endl;
cout<<&p<<endl;
return 0;
}
前4个的输出都是一样的地址...高手给个解释啊..
p(2)和(*p)(2)是等效的..为什么呀..
[解决办法]
函数指针名字=*函数指针=函数名字=函数地址
这是规定.
&p取得的是p变量本身的地址.他不同与p.
[解决办法]
请允许我对你的程序作如下注释:
#include <iostream >
using namespace std;
int func(int i)
{
cout < <i < <"in func" < <endl;
return 0;
}
int main()
{
int (*p)(int);
p=func;
//cout对于指针变量是打印其值,而不是其地址,所以此处打印的就是func的地址:
cout << p << endl;
//不言而喻,语言特性是这样:提领func函数指针:
cout << func << endl;
//语言特性规定,对函数指针的解引用,只能是函数所在的地址,即函数指针:
cout << *p << endl;
//等同于func-提取函数地址:
cout << &func << endl;
//所以,上述四条语句,效果等同!
cout << &p << endl;
return 0;
}