首页 > 试题广场 >

用变量a给出下面的定义:一个有10个指针的数组,该指针指向一

[单选题]
用变量a给出下面的定义:一个有10个指针的数组,该指针指向一个函数,该函数有一个整形参数并返回一个整型数
  • int *a[10];
  • int (*a)[10];
  • int (*a)(int);
  • int (*a[10])(int);
推荐
样的表达式可以遵循这样的规则:从右向左,由近及远,括号优先;比如
从a符号开始。其右边是[10],说明a是个数组,其中存了十个元素。
再看a的左边是一个*。说明数组中存的是指针。
现在在看(*a[10])的右边是(int);说明所存的指针是指向有一个int形参的函数
现在看(*a[10])的左边是个int ,说明指向的函数的返回值为int 类型
编辑于 2016-10-29 23:47:37 回复(4)



int *a[10];   //指向int类型的指针数组a[10]
int (*a)[10]; //指向有10个int类型数组的指针a
int (*a)(int);//函数指针,指向有一个参数并且返回类型 均为int的函数
int (*a[10])(int); //函数指针的数组,指向有一个参数并且返回类型均为int的函数的数组
编辑于 2016-03-04 12:34:47 回复(7)
一个有趣的网站,可以自动分析声明。

另外,可以安装 sudo apt-get install cdecl

========== 1. 由变量描述到表达式 ==========
本题
用变量a给出下面的定义:一个有10个指针的数组,该指针指向一个函数,该函数有一个整形参数并返回一个整型数:

1. 定义一个数组
a[10]
2. 该数组元素是指针
*a[10]
3. 该指针指向一个函数,
(* a[10]) ()
4. 有一个整形参数
(* a[10]) (int)
5. 并返回一个整形数
int (* a[10]) (int)

另外一个例子:
定义一个函数指针,指向的函数有两个int形参并且返回一个函数指针,返回的指针指向一个有一个int形参且返回int的函数?
来自 <http://www.nowcoder.com/questionTerminal/960f8047a9ee4a6f8227768f3bc2734d>

1. 定义一个函数指针
(*p)
2. 指向的函数有两个int参数
(*p) (int,int)
3. 返回值是一个函数指针
* (*p) (int,int)      (* (*p) (int,int))
4. 返回的指针指向一个int参数
(* (*p) (int,int))(int)
5. 并返回 int
int  (* (*p) (int,int))(int)
所以:int  (* (*p) (int,int))(int)

相似的一个例子
声明一个指向含有10个元素的数组的指针,其中每个元素是一个函数指针,该函数的返回值是int,参数是int*,正确的是()

来自 <http://www.nowcoder.com/questionTerminal/242d747044bd417e95fe37d69884dff8>
1. 声明一个指针
(*p)
2. 该指针指向一个数组
(*p)[10]
3. 每个元素是一个函数指针
(*(*p)[10])()
4. 参数是int*
(*(*p)[10])(int*)
5. 返回值是int
int (*(*p)[10])(int*)

========== 2. 由表达式到变量描述 ==========

经典例子
注意: 指向数组的指针和指针数组
int *a[10]: a是一个数组,该数组的元素是指针,每个指针都指向一个int型
int (*a)[10]:a是一个指针,该指针指向一个数组,数组元素是int

int (*a)[10]: declare a as pointer to array 10 of int
int *a[10]:declare a as array 10 of pointer to int

例子1
int (*a[10])(int)
1. a是一个数组
2. a这个数组的元素是一个指针
3. 指针是一个函数指针
4. 这个函数参数是int,返回值是int

a是一个包含10个元素的数组,每个元素指向一个参数是int,返回值是int的函数。

declare a as array 10 of pointer to function (int) returning int
-----------
例子2
int (*(*p)[10])(int*)
1. p是一个指针
2. p这个指针指向一个数组
3. 数组元素是指针
4. 数组元素的指针指向一个函数
5. 这个函数参数是int*,返回值是int

p是一个指向包含10个元素的数组的指针,每个元素是一个函数指针,指向一个参数是int*,返回值是int的函数。
declare p as pointer to array 10 of pointer to function (pointer to int) returning int

编辑于 2017-04-09 17:25:04 回复(4)
依照题意依次写出即可:
一个有10个指针的数组:*a[10]
该指针指向一个函数:    (*a[10])()
该函数有一个整形参数: (*a[10])(int)
并返回一个整型数:         int (*a[10])(int)
发表于 2017-06-19 11:01:33 回复(0)
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的函数的数组

编辑于 2016-03-15 10:48:29 回复(0)
本题选择D选项,考察指针的基本概念
发表于 2016-10-28 09:57:59 回复(0)
指针数组和数组指针采用中文比较难懂,但是用英文会比较好理解一点,解释如下:
指针数组:array of pointers,即用于存储指针的数组,也就是数组元素都是指针。如:int* a[4];

数组指针:a pointer to an array,即指向数组的指针。如:int (*a)[4];

因而A选项表示指针数组,即该数组有10个元素,每个元素都是一个指针,且指针指向int类型;
B选项表示数组指针,表示一个指向含有10个int类型元素的数组的指针;
C选项指的是一个函数指针,该函数含有一个int类型的参数,返回值类型也是int型;
D选项指的是题目要求的指针。
编辑于 2016-05-08 09:08:32 回复(2)


int *a[10];   //指向int类型的指针数组a[10]
int (*a)[10]; //指向有10个int类型数组的指针a
int (*a)(int);//函数指针,指向有一个参数并且返回类型 均为int的函数
int (*a[10])(int); //函数指针的数组,指向有一个参数并且返回类型均为int的函数的数组
发表于 2016-04-04 17:22:59 回复(0)
D
发表于 2016-03-17 00:03:50 回复(0)
A
发表于 2016-03-12 08:35:11 回复(0)
可以使用排除法!
首先,是有10个指针的数组,所以一定会有[10],排除了C;
然后,该函数有一个整形参数,一定会有(int ), 所以这样只有D符合了;
发表于 2016-03-09 13:16:56 回复(0)
d
发表于 2016-02-28 22:31:15 回复(0)
D
根据题目 首先最里层应该是一个数组,其次数组的元素又是一个指针,最后每个指针又指向一个函数
根据运算符的顺序就可以知道选择D了
发表于 2016-01-26 18:50:23 回复(0)
D
发表于 2015-12-08 00:21:37 回复(0)
D    函数指针构成的指针数组
发表于 2015-12-07 19:48:40 回复(0)