首页 > 其他 > 详细

返回值是函数指针的函数

时间:2021-02-13 08:53:09      阅读:26      评论:0      收藏:0      [点我收藏+]

  随便写一个函数声明:int func(int a, int b);

  该函数是一个返回值为int类型,具有两个int类型变量的函数。如果要定义一个这样的函数指针应该怎么定义呢,一般有下列两种方法:

1. 直接定义

  int (* p_func)(int a, int b); 

   实际上一个函数指针不关心它的输入变量名,只关心输入变量类型,因此输入变量名可以省略掉,如下:

  int (* p_func)(int, int);  

  这样就定义了一个函数指针,去掉变量名和最后的分号就是变量类型,因此p_func这个函数指针的变量类型为int (*)(int, int)

2. 用typedef定义

  可以用typedef定义一个函数指针类型,方法如下:

  typedef int (* func_t)(int, int);  

  这样就可以用func_t去定义该类型的函数指针了,如:func_t p_func;

3. 测试例程

  

 1 #include <stdio.h>
 2 
 3 int add(int a, int b)
 4 {
 5     return a + b;
 6 }
 7 
 8 int sub(int a, int b)
 9 {
10     return a - b;
11 }
12 
13 int(*func(int a)) (int, int)
14 {
15     if (a == 1) {
16         return add;
17     }
18     
19     return sub;
20 }
21 
22 /* 定义函数指针类型 */
23 typedef int (* func_t)(int, int);  
24 
25 int main(int argc, const char *argv[])
26 {
27     int k;
28     func_t p1;
29     int (*p2)(int, int);
30     
31     p1 = func(1);
32     p2 = func(2);
33     k = p1(1, 3);
34     printf("k = %d\n", k);
35     
36     k = p2(1, 3);
37     printf("k = %d\n", k);
38     
39     return 0;
40 }

测试结果:

技术分享图片

 

 代码分析:

代码定义了两个函数,add和sub,add用来计算加法,sub用来计算减法,add和sub函数的类型是一样的。该函数类型为int (*)(int, int),因此可以用int (*p1)(int, int)这种写法定义p1,或者先用typedef int (* func_t)(int, int);定义函数类型,然后就可以用func_t去定义函数指针了。

返回值是函数指针的函数

原文:https://www.cnblogs.com/Suzkfly/p/14399233.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!