C 解析复杂声明

2020-12-17  本文已影响0人  Tubetrue01

引言

这里会讲解一些在 C 中常常遇到的比较复杂的声明,这些声明可能会劝退你学习 C 的热情,但是相信我,读完这一篇之后,你会发现,再复杂的声明也不过如此嘛。

规则

简单类型说明

有了以上规则,我们可以一步一步开始了。

复杂类型说明

有了以上基础,我们可以挑战一下稍微复杂一点的声明了。

我们最后以这个著名的函数收尾,这应该算是最复杂的声明了吧,如果还有更复杂的,欢迎大家留言。长话短说,让我们开始吧!

从 signal 开始,先跟 () 结合,说明 signal 是一个函数,进入到 () 里面,该函数有两个参数,一个是 int 类型的,一个是具有 int 类型的参数且无返回值的函数指针(分析:从 func 开始,先与 * 结合,说明 func 是一个指针,与 () 结合,说明这个指针指向一个函数,进入 () 里面,与 int 结合,说明指向的函数有一个 int 类型的参数,最后与 void 结合,说明该函数没有返回值),在与 * 结合,说明函数返回一个指针,在与最右边的 () 集合,说明指针指向一个函数,进入 () 里面,与 int 结合,说明该函数有一个 int 类型的参数,最后与 void 集合,说明该函数没有返回值。

虽然比较复杂,但是我们可以利用 typedef 关键字简化它来对本章进行收尾。

/*
 * 表示 func 是一个函数指针,指向一个参数为 int,返回值为 void 的函数。
 */
typedef void (*func)(int);

/*
 * 表示 signal 是一个函数,它接受两个参数,一个是 int,一个是 func,返回值为 func。
 */
func signal(int, func);

参考

上一篇 下一篇

猜你喜欢

热点阅读