void (*funcPtr)();
上面声明了一个指向函数的指针,当碰到这样一个比较复杂的声明时,最好的方法是从 中间开始和向外扩展:
- 从中间开始:即 从变量名开始
- 像外扩展:即 先注意右边最近的项,已右括号结束,再注意左边的项,已左括号结束,再注意右边的项。。。
用上述方法来解析一下第一个声明:
- 往右看:是右括号,结束
- 往左看:funcPtr是个指针
- 往左看:碰到左括号,结束
- 往右看:指针指向一个函数,即:指向函数的指针
- 向左看:函数的返回值类型是 void,即:指向返回值为 void 的函数
再看第二个例子:
void * (*(*fp1)(int))[10];
- 往右看:是右括号,结束
- 往左看:fp1 是个指针
- 往左看:是左括号,结束
- 往右看:fp1 指向一个 参数为 int 的函数(因为函数是
()
指示的,碰到了)
下一步就往左看) - 往左看:函数返回一个指针
- 往左看:是左括号,结束
- 往右看:指针指向一个 数组
- 往左看:数组类型为 void *
即:fp1是一个函数指针,指向的函数 接收 int 为参数,返回一个指针,这个指针指向一个 10 个元素的数组,数组类型为 void *
参考资料
C++编程思想:P109-110