百思不解,请指点迷津
先请看下面EssentialC++中的一段代码
bool seq_elem(int pos,int &elem,const vector<int>* (*seq_ptr)(int))
{
const vector<int> *pseq=seq_ptr(pos);
if (!pseq)
{elem=0;return false;}
elem=(*pseq)[pos-1];
return true;
}
我的问题是“const vector<int> *pseq=seq_ptr(pos);”这行为什么不用“const vector<int> *pseq=(*seq_ptr)(pos);”
并且我发现二者的运行结果是一样的,我就给莫名其妙了,书上的原文seq_ptr不应该是个指针吗,怎么可以直接带参数呢?
问题点数:20、回复次数:3Top
1 楼zhzhzhh(早上睡不醒)回复于 2002-04-04 01:38:45 得分 0
还有,我发现第一行写为“bool seq_elem(int pos,int &elem,const vector<int>* (&seq_ptr)(int))”时,用上述两种表示也可得到同样结果。也就是说这四种表示得到的结果都一样了。真把我搞糊涂了!Top
2 楼prototype(原型)回复于 2002-04-04 02:29:20 得分 0
我的问题是“const vector<int> *pseq=seq_ptr(pos);”
这行为什么不用“const vector<int> *pseq=(*seq_ptr)(pos);”
both are ok.
when you do a function call, the function name is actually
implicitly turned into a pointer to the function's starting address.
so, the following is valid:
int f() { return 0; };
...
f(); // ok. 'f' is implicitly turned into '*f'
(*f)(); //ok too. you explicitly turn 'f' to '*f'.
还有,我发现第一行写为“bool seq_elem(int pos,int &elem,const vector<int>* (&seq_ptr)(int))”时,用上述两种表示也可得到同样结果。也就是说这四种表示得到的结果都一样了。真把我搞糊涂了!
same explanation as above.
Top
3 楼fat_horse(每天进步一点点)回复于 2002-04-04 02:30:33 得分 20
seq_ptr(pos)和(*seq_ptr)(pos)这两种写法都对,
第一种直接用指针做为函数名,事实上是直接通过指针调用函数
第二种是常用的方法,通过复引用指针而调用函数。
比较起来第二种比较好,一目了然,第一种容易引起误会,以为seq_ptr是函数。
唉~~~,EssentialC++里很多写法都不很规范:PTop




