必威体育Betway必威体育官网
当前位置:首页 > IT技术

(*(void(*)())0) ()讲解

时间:2019-10-14 10:11:05来源:IT技术作者:seo实验室小编阅读:62次「手机版」
 

void(0);

(*(void(*)())0) ()  等同 ((void(*)())0) ()    ----原因函数是一种function-to-pointer的方式,&fun, fun, *fun ,**fun都是一样

硬件地址跳到0处

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

预备知识

float (*h)();

表示h是一个指向返回值float类型的函数的指针

(float(*)())

表示一个"指向返回值float类型的函数的指针"的类型转换符

假设fp是一个函数指针,那么如何调用fp所指向的函数,调用方法如下:

(*fp)();

按照人们的惯性思维,那么我们可以这样写

(*0)();

上式不能生效,因为运算符*必须要一个指针来做操作数,而且这个指针还必须是个函数指针。所以我们必须要把0强制转换成一个函数指针(指向返回值为void类型的函数的指针)

假设fp是个float指针,声明如下

float * fp;

把0强制转换成一个float指针(把变量fp去掉就可以了)

(float *)0;

类似:

假设fp是函数指针为void类型的函数的指针),声明如下:

void (*fp)();     

把0强制转换成该函数指针(变量fp去掉就可以了)

(void(*)())0

最后用(void(*)())0代替fp,从而得到调用的用法

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

可用typedef简化函数指针

例如:

typedef char * string;

string test="hello";

类似

typedef void(*func)();   //这样func就表示一个函数指针的类型

(*(func)0)();

例子

方法一:

typedef void (*pfunction)(void);

void FMI_Jump(void)

{   

pfunction jump;

jump=(pfunction)(0x80000);

jump();

 

}

方法二:

((void(code *)(void))0xF400)();

转https://blog.csdn.net/zyboy2000/article/details/4202349

相关阅读

SQL server 2016数据库 下载安装

SQL server 2016数据库 下载安装 1:获取安装包 获取安装包 点击进去如下图:复制链接到迅雷中下载 2:下载的 SQL server 2016如下图

Ribbon过滤器ZoneAvoidanceRule源码解读

一 ZoneAvoidanceRule在类图中的位置 二 ZoneAvoidanceRule源码解读 public class ZoneAvoidanceRule extends PredicateBasedR

Android面试题集锦(2019最新总结)

一、2018 2018年的年假休完了,正式进入2019的工作中。也该规划一下自己的职业生涯了;是选择继续从事Android(android的话已经火了

PLSQL 12.0.6注册码

12.0.6 64bit 注册码: Product Code(产品编号):4wkf7lzcb8amvke2rzeuclnk5emcwm5nzb serial Number(序列号):147724 password(口令

2016天猫黑色星期五大促直播报名要求及入口介绍

每年的黑五大促都是海淘党的福音,2016天猫黑色星期五大促全球直播,11月25日至27日,买手带你直击全球黑五扫货现场。今天seo实验室小

分享到:

栏目导航

推荐阅读

热门阅读