欢迎光临散文网 会员登陆 & 注册

c语言学习冷知识点1:调用地址为0的函数

2019-12-01 16:17 作者:技术龙的传人  | 我要投稿

        初学者看到(*(void (*)0)()会发怵,不知道在干什么,哪里会用到呢?怎么就调用了地址为0的函数?这么多层括号又如何去分析呢?......

          这些问题可以暴露出你的基础水平如何(函数调用,强制转换,函数指针,指针操作),下面来慢慢分析,装逼时刻到了😀。

1.声明一个函数如下:

          void fun();

函数地址为0x0000_0000,掉用它只需要写fun();即可

2.函数指针写法如下:

          void (*pfun)();

3.若要函数指针指向fun函数,fun函数地址为0,那就强转fun为函数指针:

(void (*pfun)())fun 

pfun可以省略,fun被0替换,即0强转为地址,指向fun函数如下:

(void (*)())0

4.调用0地址的函数如下:

(*(void(*)())0)();

(*(void(*)())0)取0地址中的函数后面再加一个()就调用了0地址的函数。

       新手或多或少会有些蒙,有些基础的是不是觉得很神奇?当然编程老手肯定会说用typedef不就行了,弄这么花哨干什么?

       当然可以用typedef了,后面会分享给大家下一个知识点提到。

       我这是从«c和陷阱»这本书中看到,函数调用一篇中提到的,分享给大家我的学习心得,大家一起学习进步。如果有错误请大家及时指出,大家一起讨论学习,思路和视野会开阔一些。感谢大家的支持,谢谢!



c语言学习冷知识点1:调用地址为0的函数的评论 (共 条)

分享到微博请遵守国家法律