函数名作为参数传递

来源:互联网 发布:网络电影投资公司 编辑:程序博客网 时间:2024/05/16 23:53

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

void child_handler(int sig)  {        if (sig == SIGINT)          kill(pid_parent, SIGUSR1);  }    int main(void)  {      ......      signal(SIGINT, child_handler);      ......           }  
1、无参无返回值的函数名作为另一个函数的参数

#include <stdio.h>    //定义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 <stdio.h>    //定义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 函数。

原创粉丝点击