解读C的声明,解析各种函数、指针组合的声明

有时候阅读到一些复杂一点的声明时候总是一脸懵逼,比如下面这些
int atexit(void )(*func)(void);
void(*signal(int sig,void(*func)(int)))(int);
特别是搞linux的,阅读到一些内核代码往往如此,想要理解这些函数,往往先从读法开始,下面有一种方法和大家分享。

这里写图片描述

机械地向前读(好low)
步骤如下:
1、首先着眼于标识符(变量名或者函数名)。
2、从距离标识符最近的地方开始,依照优先顺序解释派生类型(指针,数组和函数)。
优先顺序说明如下,
①用于整理声明内容的括弧
②用于表示数组的[],用于表示函数的()
③用于表示指针的*
3、解释完成派生类型,使用’of‘、’to‘、’returning‘将他们连接起来。
4、最后,追加数据类型修饰符(在左边,int、double等即返回值)。
5、英语不好的人,可以倒序解释(就是用中文的思维)


比如
int(*func_p)(double);
①首先着眼于标识符:func_p
func_p is
②因为存在括号,这里着眼于:*
func_p is pointer to
③解释用于函数的(),参数是:double
func_p is pointer to function(double) returning
④最后,解释数据类型修饰符:int,即返回值
func_p is pointer to function(double) returning int
⑤中文就是
func_p 是指向返回int的函数的指针

这里写图片描述

无论多复杂的声明,按照这个顺序来,百试不爽

下面是各种各样的c语言声明
int *hoge[10];
hoge is array(元素个数10) of pointer to int
中文:hoge是指向int的指针的数组(元素个数10)


int (*hoge)[3];
hoge is pointer to array(元素个数3) of double
中文:hoge是指向int的数组(元素个数10)的指针


int func(int a);
func is function(参数为int a)returning int
中文:func是返回int的函数(参数是int a)


int (*func)(int a);
func is pointer to function(参数为int a)returning int
中文:func是指向返回int的函数(参数是int a)的指针


下面解释上面的两个声明
int atexit(void )(*func)(void)

atexit is function(func is pointer to function(void) returning void)returning int

解析为:
atexit 是返回int的函数(参数是,指向返回void 没有参数的函数的指针)。

这个是标准库的一个函数
void(*signal(int sig,void(*func)(int)))(int);

signal is function(sig is int,func is pointer to function(int)returning void) returning pointer to function(int) returning void

解析为:
signal 是返回“指向返回void参数为int的函数的指针”的函数,它有两个参数,一个是int,另一个是“指向返回void参数为int的指针的函数的指针”。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值