请教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
}

}
...全文
181 9 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
seok 2003-01-29
  • 打赏
  • 举报
回复
那就是说stan是错的!??

呵,又一个原文笔误,潘爱民又想都不想就直译过来了,这就是对读者负不负责的态度问题
  • 打赏
  • 举报
回复
(*pta)[x]();
指向函数数组的指针是一个二级指针,即:ptr->数组地址->函数的地址。因此上面的调用是最正规的。a自然也就不对了:)
(*pfCompare)[ 0 ]( string1, string2 );
((*pfCompare)[ 0 ])( string1, string2 );二者是一样的!

seok 2003-01-28
  • 打赏
  • 举报
回复
关键在于书上的a为什么不正确

没人知道?呜...
Firstbyte 2003-01-28
  • 打赏
  • 举报
回复
如果一个指针p指向一个函数的话。初始化以后调用的时候
不论是p()还是(*p)();都一样。。(《STL源码剖析》P318

所以 b 正确。
seok 2003-01-28
  • 打赏
  • 举报
回复
大家都帮满看看吧
seok 2003-01-27
  • 打赏
  • 举报
回复
问题在于stan说的a调用方式为什么是错的?
boyfling 2003-01-27
  • 打赏
  • 举报
回复
晕倒
学c要是搞不懂指针就等于没学
nothing707 2003-01-27
  • 打赏
  • 举报
回复
我也在看primer 这个问题还没有仔细考虑过.不过感觉上和toybearcn(黄金左右脚) 的看法没有两样.
toybearcn 2003-01-27
  • 打赏
  • 举报
回复
1和b是一样的

70,023

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧