咱今天来看看c语言中一些奇葩的表达式。
1. *(( void(*)())0)()
嘿嘿。。。。如果你是第一次看到这种表达式,我一定能想象到你此时此刻的表情,不用惊讶,因为我第一次看到这个的时候也很崩溃,这是什么东东!!!!
好的我们来一步一步地拆分它,这个0就是分析的关键,有经验的宝宝肯定一眼就能看出来: 对0进行了某种强制类型的转化。
1)( void(*)())0 表示将0强制转化为函数地址,这个函数值返回值为void,无参数的函数
2)*(x)()表示调用函数。
总:调用0地址处的函数,该函数无形参,返回类型是void。
2. void(* signal(int, void (*)(int)))(int)
咳咳,是不是头有点大!!
分析一下哈:
1)signal 和()结合,表明signal是函数名。
2)signal函数的第一个参数是int ,第二个参数是:一个空返回类型的,函数参数为int的函数的地址。
3)去掉signal(int, void (*)(int))得到的便是,该函数的返回值,即为函数指针类型。
总:该式子是一个函数的声明。。
看到这里,奇奇怪怪的东西又增加了是不是。也许你也会说,这东西我们将来真的会用到吗?其实我也有同样的疑问,但是,当我们的水平达到一定的高度之后,我想我们一定会见到的。