当前位置: 代码迷 >> 综合 >> 指针数组和函数指针
  详细解决方案

指针数组和函数指针

热度:17   发布时间:2023-09-21 19:52:26.0
也许读本科就没有搞清楚过指针,反正到现在也是糊的,决定写个笔记搞懂。下面以牛客一道例题说明。

例:用变量a给出下面的定义:一个有10个指针的数组,该指针指向一个函数,该函数有一个整形参数并返回一个整型数()
A.int *a[10];
B.int (*a)[10];
C.int (*a)(int);
D.int (*a[10])(int);

答案:D

原因如下:

int *a[10];   //指向int类型的指针数组a[10]

int (*a)[10]; //指向有10个int类型数组的指针a

int (*a)(int);//函数指针,指向有一个参数并且返回类型 均为int的函数

int (*a[10])(int); //函数指针的数组,指向有一个参数并且返回类型均为int的函数的数组


1. 定义一个数组
a[10]

2. 该数组元素是指针
*a[10]

3. 该指针指向一个函数,
(* a[10]) ()

4. 有一个整形参数
(* a[10]) (int)

5. 并返回一个整形数
int (* a[10]) (int)



例2:定义一个函数指针,指向的函数有两个int形参并且返回一个函数指针,返回的指针指向一个有一个int形参且返回int的函数?
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*,正确的是() 
1. 声明一个指针
(*p)

2. 该指针指向一个数组
(*p)[10]

3. 每个元素是一个函数指针
(*(*p)[10])()
4. 参数是int*
(*(*p)[10])(int*)
5. 返回值是int
int (*(*p)[10])(int*)

 

经典例子

注意: 指向数组的指针和指针数组

int *a[10]: a是一个数组,该数组的元素是指针,每个指针都指向一个int型

int (*a)[10]:a是一个指针,该指针指向一个数组,数组元素是int


例子1

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

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


例子2

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

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

  相关解决方案