C语言如何实现一个函数返回另一个函数
来源:互联网 发布:gta5n卡掉帧如何优化 编辑:程序博客网 时间:2024/06/01 07:36
在看unix环境高级编程的时候,看到里面的signal函数是一个可以返回一个函数的函数;
特别惊讶,以前并没有想过C语言也可以这样实现函数。
按照书里所说,signal声明如下:
#include <signal.h>void (*signal(int sign, void (*func)(int) ) ) (int);
上面的signal函数原型说明此函数要求两个参数,返回一个函数指针,而该指针所指向的函数无返回值(void)。
signal的第一个参数sign是一个整数,第二个参数是函数指针,它所指的函数需要一个整型参数,无返回值。
signal的返回值是一个函数地址,该函数有一个整型参数(即最后一个(int))。用自然语言来描述就是要
向信号处理程序传达一个整型参数,而它却无返回值。当调用signal设置信号处理程序时,第二个参数是指向该
函数(也就是信号处理程序)的指针。signal的返回值则是指向在此之前的信号处理程序的指针。
下面我来说一下怎么声明定义一个函数的返回值是一个函数指针。
先定义几个函数,如下:
void input(int num) { printf("Input: %d\n", num);}void receive(int num) { printf("Receive: %d\n", num);}void print(int num) { printf("Print: %d\n", num);}
仿照signal函数,声明定义lambda如下:
void (*lambda(int num, void (*func)(int) ) ) (int) { func(num); if (num > 0) { return receive; } else { return print; }}
主函数如下:
int main(int argc, char const *argv[]){ int num; void (*func)(int); while (scanf("%d", &num)) { func = lambda(num, input); func(num); } return 0;}编译运行得到下面结果:./a.out
2
Input: 2
Received: 2
-5
Input: -5
Print: -5
11
Input: 11
Received: 11
0 0
- C语言如何实现一个函数返回另一个函数
- c语言中如何返回一个数组函数
- 如何让C语言函数返回一个二维数组
- C语言一个源文件如何调用另一个源文件里的函数
- C语言自定义函数如何返回数组
- 【C语言】利用kill函数实现一个进程向另一个进程发送信号
- C语言函数返回值实现机制
- C语言中实现函数返回字符串
- objective-c开发iosapp如何实现一个页面通知另一个页面调用某函数?
- python 中,如何在一个函数中调用另一个函数返回的多个值中的一个?
- C语言实现谷歌面试题:写一个函数返回参数二进制中 1 的个数
- js中一个函数获取另一个函数返回值问题
- javascript,将一个函数作为另一个函数的返回值。
- C语言实现一个循环移位函数
- 用C语言实现一个revert函数
- 【C语言】实现一个函数翻转字符串
- C语言中,我想在一个函数里用另一个函数的变量怎么办?
- C语言 通过指针从函数返回一个数组
- Android Service通信
- 安卓开发中利用java代码修改控件位置
- [BZOJ3130][Sdoi2013]费用流 做题笔记
- 【HowTo ML】正则化
- FATAL EXCEPTION: main 2. java.lang.NoSuchFieldError: R$id.r1
- C语言如何实现一个函数返回另一个函数
- 6 Java基础语法(二维数组,参数传递与数据加密问题)&面向对象(面向对象思想,类与对象及使用,对象内存图解)
- Android ExpandableListView 进行二级扩展 (BaseExpandableListAdapter)
- Java开发人员最常犯的10个错误
- 浅谈flywaydb
- 计算机视觉 Introduction
- L1-3. 个位数统计
- leetcode---Remove Element
- instanceof运算符