探究c++中的右左法则(非常好懂)

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。
画图解释

pic.jpg

char *var[10] 先看右边,知道var是个数组。是个什么数组呢,是个指针数组。什么指针,是个char指针。

又如int(*func(int *p))[5];
func是一个函数,参数列表(int *p),返回类型是一个指针,指针指向一个内部类型为int的长度为5的数组。这是一个函数定义。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容