依照题意依次写出即可:
一个有10个指针的数组:*a[10];
该指针指向一个函数:(*a[10])();
该函数有一个整形参数: (*a[10])(int);
并返回一个整型数: int (*a[10])(int)
所以int (*a[10])(int)就是答案。
阅读这种表达式的时候可以遵循以下的规则:从右向左,由近及远,括号优先;比如从a符号开始。其右边是[10],说明a是个数组,其中存了十个元素。再看a的左边是一个*。说明数组中存的是指针。现在在看(*a[10])的右边是(int);说明所存的指针是指向有一个int形参的函数现在看(*a[10])的左边是个int ,说明指向的函数的返回值为int 类型。
解读复杂指针申明:(使用右左法则)
1、从未定义的标识符(定义的变量名)开始阅读;
2、从最里面的圆括号看起,遇到右括号时调转阅读方向,看左边的;
3、解析完里面括号里面所有的东西,就跳出圆括号;然后再往右看,右边看完,再往左看
注意: 指向数组的指针和指针数组
int *a[10]: a是一个数组,该数组的元素是指针,每个指针都指向一个int型
int (*a)[10]:a是一个指针,该指针指向一个数组,数组元素是int
再看几个例子
例一:int (*a[10])(int)
1. a是一个数组 2. a这个数组的元素是一个指针 3. 指针是一个函数指针 4. 这个函数参数是int,返回值是int
例二:int (*(*p)[10])(int*)
1. p是一个指针 2. p这个指针指向一个数组 3. 数组元素是指针 4. 数组元素的指针指向一个函数 5. 这个函数参数是int*,返回值是int
例三:
-
int *a[
10]; 指向
int类型的指针数组a[
10]
-
int (*a)[
10]; 指向有
10个
int类型的数组的指针
a
-
int
(*a)
(int);函数指针,指向有一个参数并且返回类型均为
int的函数
-
int* a(int); 定义一个
int参数并且返回类型为
int*的函数
-
int (*a[
10])(
int); 函数指针的数组,指向有一个参数并且返回类型均为
int的函数的数组