首页 新闻 会员 周边

C++代码问题--函数指针

0
[已解决问题] 解决于 2012-05-03 17:02

下面一段简短的函数指针的实验代码:

 1 int print(int x)
 2 {
 3     cout<<x<<endl;
 4     return 0;
 5 }
 6 
 7 int _tmain(int argc, _TCHAR* argv[])
 8 {
 9     int a=10;
10 
11     int (* p)(int);    //声明两个函数指针
12     int (*p2)(int);    
13 
14     p=print;           //用两种形式赋值,貌似第二种不合法,但经验证却是成功的
15     p2=(*p);            //经验证这种方式是成功的,但是(*p2)=p是错的
16 
17     (*p)(a);           //用两种形式调用函数,貌似第二种不合法,但经验证却是成功的
18     p(a); 
19
20 (*p2)(a);
21 p2(a);
22
23 getchar();
24 return 0;
25 }

这段代码可以编译成功,并且执行结果为打印了四次a的值。请教大家其中的原因。

NLP新手的主页 NLP新手 | 菜鸟二级 | 园豆:204
提问于:2012-05-02 23:04
< >
分享
最佳答案
0
 p2=(*p); 这句和p2=p;是一样的。在c和c++中,函数指针不区分这些。比如当你想获得函数的地址的时候,假设函数名是functionName,你可以直接使用functionName,也可以使用&functionName,这些都是可以的。至于输出四次,我想你明白我说的意思你就知道为什么了,因为你调用了四次。
奖励园豆:5
Rollen Holt | 菜鸟二级 |园豆:210 | 2012-05-03 16:01

谢谢回答

NLP新手 | 园豆:204 (菜鸟二级) | 2012-05-03 17:02
其他回答(1)
0

有人认为,C语言中,本着指针的使用原理,函数指针使用时加*(dereference operator);C++中为跟函数对象统一,所以不加*。因此,语法上函数指针使用时加不加*都一样。

NLP新手 | 园豆:204 (菜鸟二级) | 2012-05-03 08:59
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册