【指针的高级声明】

    在分享这些高级声明之前,我想,大家有必要知道各个操作符在C、C++语言中的优先级,以便识别欲讲述的高级声明。
    这里先列举一些高级声明的例子,能自己揣摩清楚最好不过了,如果有想不懂的地方,请参见下方的识别方法。

复制内容到剪贴板
代码:
int f;            //声明f为一整型变量
int *f;           //声明f为一指向整型的指针
int *f,g;         //声明f为指向整型的指针,g为整型变量
int f();          //声明f为返回值类型是int的函数
int *f();         //声明f为一函数,返回类型是指向整型的指针
int (*f)();       //声明f是指针,指向返回值为整型的函数
int *(*f)();      //声明f是指针,指向函数,函数返回类型是指向整型的指针
int *(*f)[];      //声明f是指针,它指向元素为整形指针的指针数组
int **f();        //声明f是一个函数,函数的返回值是一个指向整型指针的指针
int *(*f())();    //声明f是函数,函数返回类型是某种指针,该指针指向返回类型为整型指针的函数
int (**(*f)())(); //声明f是指针,它指向某个函数,该函数返回类型是指向另一返回值为整型的函数的指针的指针
int f[];          //声明f是数组,数组元素是整型
int *f[];         //声明f是数组,数组元素是指向整型的指针
int **f[];        //声明f是数组,元素是指向整型指针的指针
int (*f)[];       //声明f是指针,它指向一个整型数组
int f()[];        //非法声明,函数不能返回数组
int f[]();        //非法声明,数组的元素不能是函数
int (*f[])();     //声明f是一个数组,数组元素是某种类型的指针,这些指针指向返回值为整型的函数,即f是一个元素为指向返回值是整型的函数的指针的数组
int *(*f[])();    //声明f是一个数组,数组元素为某种类型的指针,这些指针指向的是函数,这些函数返回值类型为指向整型的指针
int **(*f[6])();  //声明f是一个拥有6个元素的数组,它的元素是:某种类型的指针,这些指针指向的是函数,函数返回值是一个指向整型指针的指针
int (*(*f)())[];  //声明f是一个指针,指向函数,该函数返回值为指针,它指向一整型数组
int *(*(*(*f)())[])();        //声明f是一函数指针,该函数返回一指针,该指针指向数组,数组元素是指针,那些指针指向返回值类型为整型指针的函数
int (*f)(int,float);          //声明f是一函数指针,它指向一个接受两个参数的函数,函数返回值类型是整型
int *(*g[])( int, float );    //声明g是一个元素为指针的数组,这些指针指向一个函数,函数接受两个参数,返回值类型为指向整型的指针
【识别指针高级声明的方法】
    明确各操作符的优先级,然后按优先级(若优先级相同则按结合性判断)顺序识别即可(若有括号,首先结合括号内的操作符),例如:

复制内容到剪贴板
代码:

例子①  int *(*f)();
  /***
  *   步骤:
  *     ①操作符有:解引用操作符 *     函数调用操作符 ()  
  *     ②优先级顺序 () > *
  *     ③解读int *(*f)();
  *       由于括号的作用,f首先是一个指针,然后由于函数调用操作符优先于解引用操作符
  *       因此f是一个指向函数的指针,最后该函数的返回类型为 int *
  *       最终结果:
  *            f是一个指向返回类型为 int * 型函数的函数指针
  ***********************************************************************/      

例子②  int (*(*f)())[];  
  /***
  *   步骤:
  *     ①操作符有:解引用操作符 *     函数调用操作符 ()     下标操作符 []
  *     ②优先级顺序 () == [] > *
  *     ③解读int (*(*f)())[]
  *       由于括号的作用,f首先是一个指针,然后由于函数调用操作符优先于解引用操作符
  *       因此f是一个指向函数的指针,由于外层括号的作用,得到最终结果
  *              f是一个函数指针
  *               该指针指向一个函数
  *               该函数的返回类型为一个指向整形数组的指针
  *********************************************************************/
例子③  int *(*(*(*f)())[])();        
         相信大家根据以上两个例子能推出这个声明的含义了吧,其实就是一层一层的往外面走就是了
         最终结果:
              声明f是一函数指针,该函数返回一指针,该指针指向数组,数组元素是指针,这些元素指向返回值类型为整型指针的函数

你可能感兴趣的:(职场,指针,休闲,高级声明)