您的当前位置:首页>新品 > 正文

定义函数指针 即指向函数的指针

来源:CSDN 时间:2023-03-03 11:16:00

1.定义顾名思义,函数指针,即指向函数的指针 首先看下面两行代码:

void (*pf1)();void *pf2();

请思考:pf1和pf1哪个是函数指针呢?

答案是pf1,pf1先和*结合,说明pf1是指针,指针指向的是一个函数,指向的函数无 参数,返回值类型为void。


【资料图】

那么下面这行代码有是什么意思呢

char*(*fun)(char* p1, char* p2);

表示fun是一个函数指针,指向一个具有两个char*类型的形参,并且返回值也是char*类型的函数。

2.拓展:

#include void test(){printf("hehe\n");}int main(){printf("%p\n", test); printf("%p\n", &test); return 0; }

观察上面代码我们可以得知,test和&test都可以表示函数的地址,所以我们在定义函数指针的时候这两种方法都可以用。

3.例题:① .下面哪个是函数指针?( ) A.int* fun(int a, int b); B.int(*)fun(int a, int b); C.int (*fun)(int a, int b); D.(int *)fun(int a, int n);

答案解析:ABD没有区别,加的括号没有影响任何优先级,都是返回值为int *的函数,故选C。

②. 定义一个函数指针,指向的函数有两个int形参并且返回一个函数指针,返回的指针指向一个有一个int形参且返回int的函数?下面哪个是正确的?( ) A.int (*(*F)(int, int))(int) B.int (F)(int, int) C.int ((F)(int, int)) D.(*F)(int, int)(int)

答案解析:D类型不完整先排除,然后看返回值,B的返回值是int,C的返回值是int ,故选A。判断返回值类型只需要删掉函数名/函数指针和参数列表再看就行了。int ((*F)(int, int))(int)删掉(F)(int, int)后剩下int ()(int),符合题意。

③. 下面哪个是:一个参数为int *,返回值为int的函数指针( )

A.int (*fun)(int) B.int (*fun)(int ) C.intfun(int ) D.int(*fun)(int *) 答案解析:首先C压根就不是函数指针,先排除,然后D返回值不是int,排除,A的参数不是int *,排除,剩下B是正确答案。 ④. 设有以下函数void fun(int n,char *s)(……),则下面对函数指针的定义和赋值均是正确的是:( ) A.void (*pf)(int,char); pf=&fun; B.void (*pf)(int n,char *s); pf=fun; C.void *pf(); *pf=fun; D.void *pf(); pf=fun; 答案解析: CD前半句压根就不是定义而是声明,A选项参数列表的第二个参数错了。应为char ,B选项正确。需要说明的是,对于函数名来说,前面的&和都会被忽略,所以fun前面加不加取地址都没区别。只有定义出的函数指针变量(如题面中的pf)加上&后才会变成二级函数指针。

标签:

最新新闻:

新闻放送
Top