请教p319上关于"指向函数指针数组的指针"的调用问题,呜...好难懂啊!!!!
seok 2003-01-27 08:23:30 请教<c++ primer>p319上关于"指向函数指针数组的指针"的调用问题,呜...好难懂啊!!!!
<cp>p319 7.9.5上面两行对"指向函数指针数组的指针"的调用方法是:
pfCompare[ 0 ]( string1, string2 ); // a,缩写 error!
((*pfCompare)[ 0 ])( string1, string2 ); // b,显示 ok!
可是照着<cp>上的讲解编了一个程序来测试,可是对a,vc是"term does not evaluate to a function",bcb是"call of nonfunction"的错误.但对a如果用:
(*pfCompare)[ 0 ]( string1, string2 ); // 1,ok!
并且b:
((*pfCompare)[ 0 ])( string1, string2 );// b,ok!
也可写为:
(*(*pfCompare)[ 0 ])( string1, string2 );// 2,ok!
我总觉得1,2才是正确的!!!还是说...是我的理解有问题??b为什么也ok呢?
---------------------------------------------------------
我的程序(问题在最后的for中):
---------------------------------------------------------
#include <iostream>
using namespace std;
//---------------------------------------------------------------
void fn()
{
cout<<"in fn!!"<<endl;
}
//---------------------------------------------------------------
void fn2()
{
cout<<"in fn2!!"<<endl;
}
//---------------------------------------------------------------
void main()
{
cout<<"1: ptr to fn-----------------"<<endl;
//void (*p)()=fn;
void (*p)()=&fn;
//void (*p2)()=fn2;
void (*p2)()=&fn2;
p();
(*p)();
p2();
(*p2)();
//---------------------------------------------------------------
cout<<"2: a of ptr to fn-------------"<<endl;
void (*pa[2])()={fn, fn2};
for(int i=0; i<2; ++i)
{
pa[i]();
(*pa[i])();
}
//---------------------------------------------------------------
cout<<"3: ptr to 2-------------------"<<endl;
//typedef void (*pt)();
//pt (*pta)[2]=&pa;
void (*(*pta)[2])()=&pa;
for(int x=0; x<2; ++x)
{
(*pta)[x](); // 1,ok
//pta[x](); // a,error
//((*pta)[x])(); // b,ok
//(*(*pta)[x])(); // 2.ok
}
}