27 指针阅读技巧分析

1 问题

  • 下面的标识符代表什么含义?

    int (*p1)(int*,int (*f)(int*));
    int (*p2[5])(int*);
    int (*(*p3)[5])(int*);
    int* (*(*p4)(int*))(int*);
    int (*(*p5)(int*))[5];
    

2 指针阅读技巧

  • 右左法则

    • 最里层的圆括号中未定义的标识符看起
    • 首先往右看,再往左看
    • 遇到圆括号或者方括号时可以确定部分类型,并调转方向
    • 重复2,3步骤,直到阅读结束
  • 示例

    • int (*p1)(int*,int (*f)(int*));p1 是指针,指向函数,指向的函数参数为:int*f,(其中 f 为函数指针,指向的函数参数是 int* ,返回值是 int ),指向的函数返回值为:int
    • int (*p2[5])(int*);p2 是数组,有5个元素,这5个元素为指针,指针类型为函数指针,函数类型为:int(int*)
    • int (*(*p3)[5])(int*);p3 是指针,为数组指针,指向的数组有5个元素,每个元素为指针,指针的类型为函数指针,指向的函数类型为:int(int*)
    • int* (*(*p4)(int*))(int*);p4 是指针,为函数指针,函数参数为:int* ,返回值为:指针,该指针是函数指针,函数的参数为:int* ,返回值为为:int*
    • int (*(*p5)(int*))[5];p5 是指针,为函数指针,函数参数为:int* ,返回值为:指针,该指针指向一个数组,数组的类为 int[5]
  • 可通过 typedef 简化复杂指针的定义,如对于 p5

    typedef int(ArrayType)[5];
    typedef ArrayType*(FuncType)(int*);
    FuncType* p5;
    
原文地址:https://www.cnblogs.com/bky-hbq/p/13773690.html