关于简略函数指针表示的问题
我看的教程是C++程序设计教程第二版,是清华大学出版的那本.教材中有一个问题弄不懂,怎么看也不明白.故询问下高手们,问题如下:
首先有一个函数声明:
int func();
然后还有一条定义类型的:
typedef int Func();
接着就是看不明白的地方了:
int (*func(int)) ();
是一个函数声明,即*func(int)的类型是int(),也就是;Func* func(int)
它是返回一个函数指针的带有一个int参数的函数声明,该返回的函数指针类型为:int().
关键是int (*func(int)) ();是怎么就可以看成是Func* func(int)的.
后者很好理解,但是那是怎么来的呢?用定义来看,也好像不太符合, "int (*func(int)) (); "看起来跟一个函数指针声明类似,到底该如何理解呢?
[解决办法]
隐藏复杂和难以理解的语法
[解决办法]
若有函数int* func(int*); 则它的指针类型是这个样子:int* (*)(int*);
如果函数fx(int*)的返回值是这样的一个函数指针,则是
int* (* fx(int*))(int*);
看起来头晕,所以多用typedef,写成更加明了的形式.
同样令人头晕的是数组的指针.
[解决办法]
用右左法则来看:
int (*func(int)) ();
从func先向右看,碰到一个 '(int) ',表明func是一个函数,形参类型为int。
接着往右走,碰到右括号 ') ',掉转方向向左看,碰到 '* '号,表示func函数的返回类型是一个指针类型,具体为int(*)()类型的指针类型.
关于右左法则,论坛因该就有帖子介绍,楼主可以搜索一下