声明 | 声明的描述 |
---|---|
int(*abc)[6] | 指向“int型数组”的指针 |
int **(*abc[6])( ) | 指向“返回值为int型指针的指针的函数”的指针的数组 |
int **abc[ ] | int 型指针的指针数组 |
int *(*abc)[ ] | 指向int型指针数组的指针 |
int * (*abc( ))( ) | 返回值为“返回值为int型指针的函数指针”的函数 |
int (*(*abc)(int a))(int a) | 指向返回值为“指向返回值为int的函数指针”的函数指针 |
int (**(*abc)(int a))(int a) | 指向函数返回值为“返回值为int的函数指针的指针”的函数指针 |
int (*(*abc)(int a))[6] | 指向函数返回值为“指向int型数组的指针”的函数指针 |
int ((*(*abc)(int a))[6])(int a) | 指向函数返回值为“指向‘返回值为int型指针的函数指针’的数组的指针”的函数指针 |
具体解析方法
-
int abc(int a)
-
int abc[3]
-
int **abc(int a)
-
int (*abc)(int a)
-
int (*abc)[6]
-
int *abc(int a)
-
int **(*abc[6])(int a)
-
int **abc[6]
-
int *(*abc)[6]
-
int *(*abc(int a))(int a)
-
int (*(*abc)(int a))(int a)
-
int (**(*abc)(int a))(int a)
-
int (*(*abc)(int a))[6]
-
int ((*(*abc)(int a))[6])(int a)
解答
-
返回值为int的函数。
-
int 型数组
-
返回值为“int 型指针的指针”的函数。()的优先级高于*(这里指右边的*),所以abc先和()结合,即abc(int a),说明abc是一个函数(这是abc的真面目)。那么函数的返回值是什么类型的呢?abc(int a)接着和*(右边的*)结合,即*abc(int a),说明函数abc的返回值是指针类型的?那是什么类型的指针呢?从int *(*abc(int a))可以看出,abc(int a)的返回值是指向int型指针的指针。
-
指向函数返回值为int的函数指针。由(*abc)可以看出,*先与abc结合,所以abc是一个指针(而不是函数),该指针指向形参为int a,返回值为int的函数。
-
指向“int 型数组”的指针。从(*abc)可以看出,abc是一个指针,那是什么类型的指针呢?(*abc)和后面的[]结合,即(*abc)[6],所以abc指向一个数组,那么数组元素的类型呢?从int (*abc)[6]可以看出,数组元素的类型为int型。再分析一遍,指针abc指向一个数组,数组的元素类型为int型,即abc是一个指向int型数组的指针。
-
返回值为“int型指针”的函数。由于()的优先级高于*,所以abc首先和()结合,即abc(int a),由此看出abc是一个函数(而不是指针),那么该函数的返回值是什么类型的呢?abc(int a)和前面的*结合,即*abc(int a),可以看出,函数abc的返回值是指针类型的。接着,*abc(int a)和int结合,即int *abc(int a)。再分析一遍,abc是一个函数,返回值为int型指针。
-
元素为指向“返回值为int型指针的指针的函数”的指针数组。由于[]的优先级高于*,所以abc先和[]结合,即abc[6],所以abc是一个数组。然后abc[6]和*结合,即*abc[6],说明数组abc的每个元素是指针,且该指针指向形参为int a,返回值为int指针的指针的函数。
-
int型指针的指针数组。[]的优先级高于*,所以abc首先和[]结合,即abc[],所以abc是一个数组,然后abc[6]和*(右边的*)结合,即*abc[6],可以看出数组abc的每个元素为指针。那么该指针指向什么呢?接着,*abc[6]和左边的*结合(*的结合顺序为从右到左),即*(*abc[6]),所以数组abc的每个元素为指针,且该指针指向int型的指针,也就是说,数组abc的每个元素为int型的指针的指针。
-
指向“int型指针数组”的指针。由于()的优先级高于[],所以abc和*先结合,即*abc,所以abc是一个指针(这是本质)。而下标[]的优先级高于*,所以*abc然后和[]结合,即(*abc)[6],可以看出,abc指向的是一个数组,数组的元素类型为int *,即int型指针。
-
返回值为“指向返回值为int型指针的函数指针”的函数。是不是有些头晕呢?没关系,不管你头晕不晕,我都会让你清醒的。由于()的优先级高于*,所以abc先和()结合,即abc(int a),说明abc是个函数,这是本质。然后abc(int a)和前面的结合,即abc(int a),说明函数的返回值为指针,那么该指针(ptr1)指向什么呢?int *(*abc(int a))(int a),看到红色的部分了吗?可以看出,ptr1指向一个函数,该函数形参为int a,返回值为int型指针。最后我们再分析一遍,abc(int a)函数的返回值是一个指针,该指针指向形参为int a,返回值为int型指针的函数。
-
指向返回值为“指向返回值为int的函数指针”的函数指针。从(abc)(int a)可以看出,abc是一个函数指针,那么该函数指针所指的函数(f)返回值是什么类型的呢?从(abc)(int a)可以看出,函数f的返回值为指针类型(ptr_type),那ptr_type到底是什么类型的呢(指向int,char,还是函数)?从int ((*abc)(int a))(int a)可以看出,ptr_type是函数指针,所指向的函数形参为(int a),返回值为int型。
-
指向函数返回值为“返回值为int的函数指针的指针”的函数指针。分析参考11。
-
指向函数返回值为“指向int型数组的指针”的函数指针。abc先和结合,即abc,abc是一个指针。接着,*abc和()结合,即(abc)(int a),abc指向的是一个函数,即abc是一个函数指针。那么abc指向的函数返回值是什么类型呢?(abc)(int a)接着和前面的结合,即(abc)(int a),说明abc所指向的函数的返回值是一个指针,那么这个指针(ptr)指向哪儿呢?接着往下看,((*abc)(int a))[6],ptr指向一个数组,数组的元素类型为int型。再分析一遍,函数指针abc所指的函数返回值是一个指针,该指针指向int型的数组。
-
指向函数返回值为“指向‘返回值为int型指针的函数指针’的数组的指针”的函数指针。看到这个表达式,你是不是头有点大了?如果你的answer是yes,那么恭喜你,说明你还是个正常的地球人。哈哈!开个玩笑。从(abc)(int a)可以看出,abc是一个函数指针,即指针abc指向的是一个函数(f)。那么函数f的返回值是什么类型的呢?从(abc)(int a)可以看出,函数f的返回值类型是指针型(ptr)的,那么这个指针指向哪里呢?从((abc)(int a))[6]可以看出,ptr指向一个数组,那么该数组(arr)的元素是什么类型的呢?从(*(abc)(int a))[6],arr的数组的元素类型为指针类型(ptr_type),那是什么类型的是指针呢(指向int,char,还是函数)?从int (((*abc)(int a))[6])(int a)可以看出,ptr_type是指向函数的指针,该函数的形参为int a,返回值为int型指针。