数组指针VS指针数组,函数指针VS指针函数

xiaoxiao2021-02-27  407

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

(int *p[10])(int*) int [10]*p(int *) int (*(*p)[10])(int *) int ((int *)[10])*p 以上选项都不正确 上述题目为Nowcoder题目,主要涉及考点为指针数组,函数指针。瞬时脑子里面出现了指针数组,数组指针,函数指针,指针函数的概念。

在此,特对上述两组概念进行解析。

1.函数指针VS指针函数

1)函数指针声明类型如下:

返回值类型 ( *  指针变量名) ([ 形参列表]); 注1:“返回值类型”说明函数的返回类型,“(指针变量名 )”中的括号不能省,括号改变了运算符的优先级。若省略整体则成为一个函数说明,说明了一个返回的数据类型是指针的函数,后面的“形参列表”表示指针变量指向的函数所带的参数列表。例如: int func(int x); /* 声明一个函数 */ int (*f) (int x); /* 声明一个函数指针 */ f=func; /* 将func函数的首地址赋给指针f */ 或者使用下面的方法将函数地址赋给函数指针: f = &func; 赋值时函数func不带括号,也不带参数,由于func代表函数的首地址,因此经过赋值以后,指针f就指向函数func(x)的代码的首地址。 函数指针也可以用typedef进行简化,在这里与主题无关不再赘述。 2)指针函数声明如下

返回类型 标识符*函数名称(形式参数表) { 函数体} 指针函数是指 返回值 是指针的函数,即本质是一个函数。我们知道函数都有返回类型(如果不返回值,则为无值型),只不过指针函数返回类型是某一类型的指针。 返回类型可以是任何基本类型和复合类型。返回指针的函数的用途十分广泛。事 实上,每一个函数,即使它不带有返回某种类型的指针,它本身都有一个入口地址,该地址相当于一个指针。 比如函数返回一个 整型 值,实际上也相当于返回一个 指针变量 的值,不过这时的变量是函数本身而已,而整个函数相当于一个“变量”。

2指针数组VS数组指针

1)指针数组int* a[10];

例如int a[10]我们理解为一个数组有10个元素,每个元素为int类型,char a[10]理解为数组里面有10个元素,每个元素为char类型;同理,我们可以理解int* a[10]理解为有一个10个元素数组,每个元素为一个int*,即int指针。

2)数组指针int (*a)[10]

数组指针是一个指针,只不过它指向一个含有10个int元素数组。[]优先级高于*,所以要添加括号。二维数组的数组名是一个数组指针。

对于上边题目:

先看未定义标识符p,p的左边是*,*p表示一个指针,跳出括号,由于[]的结合性大于*,所以*p指向一个大小为10的数组,即(*p)[10]。左边又有一个*号,修释数组的元素,*(*p)[10]表示*p指向一个大小为10的数组,且每个数组的元素为一个指针。跳出括号,根据右边(int *)可以判断(*(*p)[10])是一个函数指针,该函数的参数是int*,返回值是int。所以选C。

转载请注明原文地址: https://www.6miu.com/read-942.html

最新回复(0)