对函数指针与typedef的理解:typedef void (*sighandler_t)(int)

文章目录

缘由

2021年9月22日在刷CS:APP的时候,邂逅了一种函数指针与typedef结合的写法:typedef void (*sighandler_t)(int)
对函数指针与typedef的理解:typedef void (*sighandler_t)(int)
来源:CSAPP第三版

解释函数指针int (*f)(int*);

对于以下声明:

int (*f)(int*);

要从f开始往外读。 首先(*f)表明f是一个指针;(*f)(int*)表明f是一个指向函数的指针,这个函数以int*作为参数。

总的来看,f是一个指针,指向一个函数,该函数的参数是 int *型, 返回值是int型。即,f被声明为一个函数指针

这里需要注意的一点是, *f两边的括号是必需的,否则声明变成:

int *f(int *);

它会被解读为

(int *) f(int *);

也就是说,它会被解释为一个函数原型,声明了一个函数f,它以int * 作为参数,返回值类型为int *.

解释typedef void(*sighandler_t)(int)

理解了函数指针的声明,那么对于

typedef void(*sighandler_t)(int)

的理解就可以展开了。

这里为一个函数指针指定了别名:sighandler_t

sighandler_t 是一个函数指针,它指向这样一个函数:参数是int型,返回值是void型,即无返回值。

下面是别名的使用:

sighander_t signal(int signum, sighandler_t handler);

声明signal是一个函数,它有两个参数,其一是int型的signum,其二是sighandler_t型(函数指针型)的handler; 函数signal的返回值类型也是sighandler_t型(函数指针型)。

参考:CSAPP 第三版

上一篇:《C程序设计语言》学习笔记——结构


下一篇:C语言—引用、指针的声明、关键字typedef