一.int (*func_p)(double);
1.首先着眼于标示符,func_p.英语的表达为:func_p is
2.再看括号里面的,*func_p.英语的表达为:func_p is pointer to
3.解释用于函数的(), 参数是double. 英语的表达为:func_p is pointer to function(double) returning
4.最后解释数据类型修饰符int.英语的表达为:func_p is pointer to function(double) returning int
5.翻译成中文:func_p 是指向返回int的函数的指针。
二.int atexit(void (*func)()(void));
1.首先着眼于标示符, atexit. 英语的表达为:atexit is
2.解释用于函数的(). 英语的表达为:atexit is function() returning
3.atexit的参数部分同上解释。
4.最后的英语表达为:atexit is function(func is pointer to function(void) returning void) returning int
5.翻译成中文:atexit 是返回int的函数(参数是,指向返回void没有参数的函数的指针).
三.void (*signal (int sig, void (*func)(int) ) ) (int); 标准库中的signal函数。
1.首先着眼于标示符,signal . 英语的表达为:signal is
2.相比*,()的优先顺序更高,所以先解释这部分
signal (int sig, void (*func)(int) ), 英语的表达为:signal is function() returning
3.解释参数部分。第一个参数是int sig.英语的表达为:signal is function(sig is int, ) returning
4.另一个参数解释和第一种类似.
signal is function(sig is int, func is pointer to function(int) returning void) returning
5.参数部分解释完,再解释*.
signal is function(sig is int, func is pointer to function(int) returning void) returning pointer to
6.解释表示函数的(), 参数为int,返回void。
signal is function(sig is int, func is pointer to function(int) returning void) returning
pointer to function(int) returning void.
7.翻译成中文:signal 是返回“指向返回void 参数为int 的函数的指针” 的函数,它有两个参数,
一个是int,另一个是“指向返回void 参数为int 的指针的函数的指针”。
注:运用typedef可以让声明变得简洁。
typedef void(*sig_t) (int);
sig_t signal(int sig, sig_t func);
sig_t 代表“指向信号处理函数的指针”这个类型。
本文主要内容摘自《征服C指针》一书。