函数指针
在学习UNIX环境高级编程,信号中有一个函数signal()定义中涉及到函数指针。
#include <signal.h>
typedef void (*sighandler_t)(int);
sighandler_t signal(int signum, sighandler_t handler);
1. 函数指针 指向某种特定类型的函数,函数的参数和返回值类型相同;
int (*funcptr)(int, int); // 声明一个指向int (int, int)类型函数的指针
int add(int a, int b); // 函数的定义
funcptr = add; // 通过复制使得函数指针指向具体的add函数;
2. 使用 typedef 定义函数指针类型
typedef int (*Funcptr)(int, int);
Funcptr funcptr; // 定义指向int (int, int)函数类型的具体指针 ptr
3. 函数指针的使用
funcptr = add; // ptr 指向 add()函数
funcptr(100, 100); // 使用方法1. 和指向的函数用法一样
(*funcptr)(100, 100); // 使用方法2. 括号不可以少
4. 函数指针作为形参和返回值(重点)
void func(int value, int funcptr(int,int)); // 1. 第二个参数为函数类型,会自动转换为指向此类函数的指针
void func(int value, int (*funcptr)(int, int)); // 2. 显性地将形参定义为指向函数类型的指针
void func(int value, Funcptr); // 3. 使用typedef
函数调用
funcptr = add;
func(1, add); // 1. add会自动转换为函数指针
func(1, funcptr);
函数指针作为返回值
Funcptr func(int value, Funcptr);
int (*funcptr)(int, int) func(int value, int (*funcptr)(int, int));
所以
typedef void (*sighandler_t)(int); // typedef 函数指针类型是:返回值void, 形参int
sighandler_t signal(int signum, sighandler_t handler);
本文深入解析函数指针的概念,包括其声明、定义、使用及在C语言中的具体应用,如作为参数传递和返回值,特别关注了在信号处理中的作用。
&spm=1001.2101.3001.5002&articleId=105998604&d=1&t=3&u=f2b27267c21641238cd552c54b89909f)
1436

被折叠的 条评论
为什么被折叠?



