下面一段简短的函数指针的实验代码:
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的值。请教大家其中的原因。
p2=(*p); 这句和p2=p;是一样的。在c和c++中,函数指针不区分这些。比如当你想获得函数的地址的时候,假设函数名是functionName,你可以直接使用functionName,也可以使用&functionName,这些都是可以的。至于输出四次,我想你明白我说的意思你就知道为什么了,因为你调用了四次。
谢谢回答
有人认为,C语言中,本着指针的使用原理,函数指针使用时加*(dereference operator);C++中为跟函数对象统一,所以不加*。因此,语法上函数指针使用时加不加*都一样。