博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
函数名作为参数传递
阅读量:4639 次
发布时间:2019-06-09

本文共 1145 字,大约阅读时间需要 3 分钟。

假如不知道signal的函数原型,考虑child_handler函数的参数从哪里来?

 

void child_handler(int sig)  {        if (sig == SIGINT)          kill(pid_parent, SIGUSR1);  }    int main(void)  {      ......      signal(SIGINT, child_handler);      ......           }

1、无参无返回值的函数名作为另一个函数的参数

 

 

#include 
//定义handler是一个函数指针类型,无参无返回值 typedef void (*handler)(void); void output(void) { printf("Hello World!\n"); } //无参函数作为另一个函数的参数 void test_func(handler func) { func(); } int main(void) { test_func(output); return 0; }

 

运行结果:Hello World!
2、有参有返回值的函数名作为另一个函数的参数
#include 
//定义handler是一个函数指针类型,有两个参数和返回值 typedef int (*handler)(int, int); int add(int a, int b) { return a+b; } //有参有返回值函数作为另一个函数的参数 int test_func(int m, int n, handler func) { return func(m, n); } int main(void) { int a, b, sum; a = 3; b = 4; sum = test_func(a, b, add); printf("sum = %d\n", sum); return 0; }
运行结果:sum = 7
对于开始的疑惑,如果只从C语言的角度理解,原理是在执行完 signal(SIGINT, child_handler); 函数后,signal函数会将第一个参数 SIGINT 传递给 child_handler 函数。

 

转载于:https://www.cnblogs.com/lialong1st/p/7756665.html

你可能感兴趣的文章
Vue创建SPA那些事
查看>>
python基础学习1-列表推导式和字典推导式
查看>>
mfc Radio Buttons
查看>>
[JavaScript]父子窗口间参数传递
查看>>
Test Controller Tool
查看>>
86. Partition List
查看>>
[LintCode] 378 Convert Binary Search Tree to Doubly Linked List 解题报告
查看>>
JAVA-初步认识-常用对象API(集合框架-泛型-泛型限定-上限的体现)
查看>>
查找一个字段所处的数据库及表
查看>>
第一周学习进度+四则运算1.0版
查看>>
baba 运动网
查看>>
for循环小练习
查看>>
JAE京东云引擎Git上传管理代码教程和京东云数据库导入导出管理
查看>>
教你如何迅速秒杀掉:99%的海量数据处理面试题
查看>>
高血压吃什么好?
查看>>
Java for LeetCode 047 Permutations II
查看>>
React工作原理
查看>>
JS 获取当前时间
查看>>
bzoj3238 [Ahoi2013]差异
查看>>
ASP.NET常见面试题及答案(130题)
查看>>