当前位置: 代码迷 >> C语言 >> 一道很有意思的关于函数指针的题目
  详细解决方案

一道很有意思的关于函数指针的题目

热度:257   发布时间:2008-05-25 22:46:46.0
一道很有意思的关于函数指针的题目
void MyFun(int x);
void (*FunP)(int);

void MyFun(int x)
{
printf("%d\n",x);
}

下面是四种测试代码:
1)
int main(int argc,char** argv)
{
MyFun(10);
FunP=MyFun;
FunP(20);
return 0;
}

2)
int main(int argc,char** argv)
{
(*MyFun)(10);
FunP=&MyFun;
(*FunP)(20);
return 0;
}
3)
int main(int argc,char** argv)
{
MyFun(10);
FunP=&MyFun;
FunP(20);
return 0;
}
4)
int main(int argc,char** argv)
{
(*MyFun)(10);
FunP=MyFun;
(*FunP)(20);
return 0;
}
我当时肉眼观察后,认为除了代码1能正确执行之外别的编译会报语法错。但是在vc2005中四段代码都能正确执行,大感意外,实在想不出有什么合理解释,所以拿出来跟大家讨论一下。
搜索更多相关的解决方案: int  MyFun  FunP  指针  函数  

----------------解决方案--------------------------------------------------------
合理解释很简单――对于函数指针,你加多少*和&都是正常的……我见过有人这么写的:
int (******************************************************************************func)(int);
然后运行都正常……
----------------解决方案--------------------------------------------------------
原来如此
看来真的不能用常理来解释了啊,恩。
----------------解决方案--------------------------------------------------------
  相关解决方案