首页 > 试题广场 > 声明一个指向含有10个元素的数组的指针,其中每个元素是一个函
[单选题]
声明一个指向含有10个元素的数组的指针,其中每个元素是一个函数指针,该函数的返回值是int,参数是int*,正确的是()
  • (int *p[10])(int*)
  • int [10]*p(int *)
  • int (*(*p)[10])(int *)
  • int ((int *)[10])*p
  • 以上选项都不正确
推荐
C
先看未定义标识符p,p的左边是*,*p表示一个指针,跳出括号,由于[]的结合性大于*,所以*p指向一个大小为10的数组,即(*p)[10]。左边又有一个*号,修释数组的元素,*(*p)[10]表示*p指向一个大小为10的数组,且每个数组的元素为一个指针。跳出括号,根据右边(int *)可以判断(*(*p)[10])是一个函数指针,该函数的参数是int*,返回值是int。所以选C。
参考博客:
http://blog.csdn.net/code_crash/article/details/4854965

编辑于 2015-12-09 09:55:21 回复(6)
C.   首先题目说要声明一个数组指针,  一般我们想到的数组指针是 随便来一个 int(*p)[10],    然后又说每个元素是一个函数指针,那么我们随便来一个 函数指针  int (*pf)(int *) . 然后把(*p)[10]作为一个整体替代 pf     即   int(*(*p)[10]))(int *);    分析: 判断一个复杂式子看最高优先级的,*p是一个指针,然后(*p)外面是[],所以是数组指针,(*p)[10])描述完毕,然后再看外面int(*)(int *)很明显,这是一个函数指针,所以这个数组中每个元素是函数指针
发表于 2015-04-13 14:36:58 回复(5)
这一题要区分,数组指针和指针数组。
int(*p)[10]是一个数组指针,p是一个指针指向 int[10] 数组, int* p[10], 是一个指针数组,p是一个数组,数组每个元素是个指向int型的指针。
发表于 2015-05-14 23:31:29 回复(3)
先拆分再组合:
第一步:
声明一个函数指针,参数是  int*  ,返回值是  int
int (*p) (int *);
第二步:
声明一个数组,该数组含有10个元素,每个元素是  int 型指针
int *p[10];
第三步:
声明一个指针,该指针指向含有10个元素的数组
int (*p)[10];
第四步:
将前面三步结合起来理解
声明一个指针,该指针指向含有10个元素的数组,数组中每个元素是一个函数指针,该函数的返回值是int,参数是int*
int (*p)[10]; //数组的指针
int *(*p) [10]; //数组的指针指向包含指针的数组
int (*(*p)[10]) (int*);  数组的指针指向包含函数指针的数组

发表于 2017-08-25 10:19:36 回复(0)
大家都抛出了玉,我来添块砖。
int (*(*p)[10])(int *)
1.先找到标识符p
2.(*p)使得p与*紧密结合,所以p是指针
3.p后面是[10]表明p指向的对象是一个有10个元素的数组
4.将上面1,2,3中的内容都去掉,剩下的(即int(int *))就是这个数组中元素的类型,可见,元素的类型时函数指针,参数为int*,返回值为int
发表于 2015-12-21 22:54:20 回复(0)
 首先题目说要声明一个数组指针,  一般我们想到的数组指针是 随便来一个 int(*p)[10],    然后又说每个元素是一个函数指针,那么我们随便来一个 函数指针  int (*pf)(int *) . 然后把(*p)[10]作为一个整体替代 pf     即   int(*(*p)[10]))(int *);    分析: 判断一个复杂式子看最高优先级的,*p是一个指针,然后(*p)外面是[],所以是数组指针, (*p)[10])描述完毕,然后再看外面int(*)(int *)很明显,这是一个函数指针,所以这个数组中每个元素是函数指针,所以这个答案是C
发表于 2017-04-06 08:06:25 回复(0)
首先是一个指针数组,(*p)[10],还没有数组类型,每个元素是一个函数指针,设为q,int(*q)(int *),用数组替换q,int(*(*p)[10])(int *)
发表于 2015-08-21 15:00:27 回复(2)
都不正确,应该为 int (*p[10])(int *)
发表于 2014-11-09 16:43:48 回复(1)
1.数组指针, 又称行指针,指向数组的指针:int (*p)[10]; ********************************************** 2.指针数组,数据元素为指针的数组:int *p[10]; ********************************************** 3.函数指针:int *p(char a),指向函数的指针,int 是函数的返回值,char a是函数的参数,p 为指针
发表于 2018-09-22 16:30:05 回复(0)
答案应该是A,自己好好看,在自己的vs上试试,这是谁推荐的,懂不懂C/C++
发表于 2017-08-01 20:12:32 回复(1)
        对于未定义标示符p,p的左边是*,*p说明p是一个指针,由于[ ]的优先级高于*,所以*p先于[10]结合变为(*p)[10],说明*p指向一个大小为10的数组,左边的*修饰数组的元素,(*p(*p)[10])意思就是一个大小为10的指针数组,右边的(*int)代表的是函数的参数,最左边的int表示函数返回值的类型。
发表于 2017-05-05 20:53:53 回复(0)
从未定义的标示符开始看起。在优先级上  *<[].  ()可以改变优先级。 
 所以: *p[10]   表示p是个里面装着10个元素的数组。 数组中元素类型是指针。
          (*p)[10]  p是一个指针, 指向含有10个元素的数组。 

发表于 2016-04-02 11:42:30 回复(0)
指针数组,首先必须是数组比如int *p[10]

数组指针,首先必须是指针比如int (*p)[10]

发表于 2015-12-08 19:47:50 回复(0)
#include <iostream>
using namespace std;

int count = 0;
int fun(int *){
	cout<<count++<<endl;
	return 0;
}

int main(){
//	int (*arr)(int *)  = &fun;
	int t = 10;
	int (*(*p)[10])(int *);
	int (*arr[10])(int *);
	p = &arr;
	for(int i=0;i<10;i++)	{
		(*p)[i] = &fun;
		(*p)[i](&t);
	}
	system("pause");
        return 0;
}
函数指针、数组指针一起考够猛
发表于 2015-09-28 16:02:06 回复(1)
错误:
int ((*p)[10])(int *);
使用gcc编译提示:
error: declaration of ‘p’ as array of functions

正确:
int (*(*p)[10])(int *);

解析:
不能定义函数数组,但是可以定义函数指针的数组。
发表于 2015-09-18 11:28:18 回复(0)
1、数组指针 *(p)[10]
2、数组指针的类型是一个函数指针 : int ()(int *)     这个就是函数指针的类型,括号里就可以填变量名
3、 1与2 融合在一起, 将1 变成变量, 即, int (*( *(p)[10]))(int *)
发表于 2015-08-17 16:59:35 回复(0)
好吧
发表于 2014-10-25 00:53:47 回复(0)
其他都编译不过
发表于 2014-10-25 00:25:59 回复(2)
应该是选C没有错了,我还编译了一下


编辑于 2015-12-09 09:53:41 回复(4)
数组指针是数组的指针,一个指针指向一个数组。而对指针数组是指针的数组,数组中的每个元素都是指针
发表于 2018-12-26 11:19:29 回复(0)
指向指针的指针 因此需要两个**
发表于 2018-08-23 16:26:28 回复(0)