美文网首页C++
探究c++中的右左法则(非常好懂)

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

作者: ManjackGo | 来源:发表于2018-02-08 18:17 被阅读24次
    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的数组。这是一个函数定义。

    相关文章

      网友评论

        本文标题:探究c++中的右左法则(非常好懂)

        本文链接:https://www.haomeiwen.com/subject/dsattftx.html