typedef int (*OP_FUNC)(int &, int &);
OP_FUNC func_array[4];
可以替换为
int (*array_func[4])(int &, int &);
根据右左法则,知道了是个数组,那么下一步就需要知道数组的类型。往左看发现这个数组的内容都是一些指针,那么下一步是看指针的类型是啥。往右看看到(int &, int &)
,由于是左括号开头的,所以视为一个整体,也就是说它是一个参数列表,所以这个指针就是个函数指针。既然是函数指针,那么必定会有返回值,往左边看,看到是int,所以指针的类型是函数指针,返回值和参数都在前文说明了。
右左法则详解
-
遇到数组符号:
考虑数组内容的类型 -
遇到指针符号*:
考虑指针的类型 -
往右的时候碰到左括号:
多是一个函数的参数列表
例子
int (*(*func)(int *p))[5];
func是一个指针,往右看又看到参数列表(左括号代表即将开始一个参数列表),所以参数列表是(int *p)
,返回值是一个星号,也就是指针。然后看这个指针是指向什么的,指向了右边一个[5]
,说明这是一个指向数组的指针。最后看这个数组的类型,类型是int。
画图解释
char *var[10]
先看右边,知道var是个数组。是个什么数组呢,是个指针数组。什么指针,是个char指针。
又如int(*func(int *p))[5];
。
func是一个函数,参数列表(int *p)
,返回类型是一个指针,指针指向一个内部类型为int的长度为5的数组。这是一个函数定义。