(*(void (*) ()) 0) ();
来源:互联网 发布:淘宝 主板 编辑:程序博客网 时间:2024/06/04 18:39
BBBc
最近在学校把小论文的事情搞定了,追踪内核也缓了一缓,恰好同学手边有一本C陷进与缺陷,下午就翻了几页,发现还挺有趣的。
在第二章语法陷进看到一个有趣的例子:(*(void (*) ()) 0) ();
第一眼看到完全懵了,后来经过讲解发现很好理解!(果然是封神的书!)
(*(void (*) ()) 0) ();其实可以拆分成三个部分:
1.void(*) (),其实这样看起来还不是很明显,在*之后加上一个变量p,void (*p) ();那很明显,这就是一个函数指针*p的声明,且返回值为void类型,那去掉p之后,是一个类型转换,转换的类型就是void *。
2.(void (*) ()) 0则就是对整数0做的类型转换,此时0就是一个函数指针类型,且返回值为void。
3.(*(void (*) ()) 0) ();我们可以用fp代替这里的类型转换,即(*fp) ();这就是一个函数调用,fp为指向该函数的指针。
这样看来还是很好理解的,还有个问题就是第二部分的0,该指针的值岂不就是0,也就是地址为0的位置,这满足了书中说的,在地址为0的地方调用子程序。
0 0
- (*void (*) () ) 0) ();
- (void*)0
- void 0
- (*(void (*)( ) )0)( )
- (*(void (*) ()) 0) ();
- C表达式((void (*)(void))0();
- 理解(*(void(*)())0)()和void (*signal(int, void(*)(int)))(int)
- ((void (*)(void)) (function[i][0]) )()功能分析
- javascript:void(0)
- javascript:void(0)
- void(0) 与 #
- javascript:void(0)
- Javascript:void(0)和#
- javascript:void(0)简介
- (*(void(*)())0) ()讲解
- javascript:void(0)
- Javascript:void(0)和#
- javascript:void(0)
- 【IDE-Visual Studio】灾难性故障(异常来自 HRESULT:0x8000FFFF (E_UNEXPECTED))
- UVa 565 - Pizza Anyone?
- Words 2016.9.5
- module_platform_driver(), module_i2c_driver
- codeforces 615B
- (*(void (*) ()) 0) ();
- android系统架构
- composer安装yii2,及报错
- 平衡二叉树
- 修改系统字体文件
- usb启动盘提示vesamenu.c32 not a COM32R image
- mysql group by 组内排序
- windows系统信息获取 注册表
- java实现截取6个汉字字母数字