OpenEdv-开源电子网

 找回密码
 立即注册
正点原子全套STM32/Linux/FPGA开发资料,上千讲STM32视频教程免费下载...
查看: 6056|回复: 6

typedef void (*pFunction)(void);讲解的特别好,适合新手学习

[复制链接]

26

主题

201

帖子

0

精华

高级会员

Rank: 4

积分
606
金钱
606
注册时间
2013-12-14
在线时间
125 小时
发表于 2015-9-22 17:10:42 | 显示全部楼层 |阅读模式
刚在网上看到的,讲解的特别好,适合新手学习,高手请忽略...
转自:http://blog.csdn.net/zyboy2000/article/details/4202349

(*(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)();

正点原子逻辑分析仪DL16劲爆上市
回复

使用道具 举报

530

主题

11万

帖子

34

精华

管理员

Rank: 12Rank: 12Rank: 12

积分
165524
金钱
165524
注册时间
2010-12-1
在线时间
2116 小时
发表于 2015-9-22 21:53:59 | 显示全部楼层
我是开源电子网www.openedv.com站长,有关站务问题请与我联系。
正点原子STM32开发板购买店铺http://openedv.taobao.com
正点原子官方微信公众平台,点击这里关注“正点原子”
回复 支持 反对

使用道具 举报

72

主题

2711

帖子

2

精华

论坛大神

Rank: 7Rank: 7Rank: 7

积分
3505
金钱
3505
注册时间
2014-8-4
在线时间
696 小时
发表于 2015-12-30 17:24:36 | 显示全部楼层
nice.....
回复 支持 反对

使用道具 举报

22

主题

117

帖子

0

精华

资深版主

Rank: 8Rank: 8

积分
798
金钱
798
注册时间
2015-10-24
在线时间
160 小时
发表于 2016-6-6 21:54:44 | 显示全部楼层
谢谢楼主分享
回复 支持 反对

使用道具 举报

30

主题

1170

帖子

0

精华

金牌会员

Rank: 6Rank: 6

积分
1993
金钱
1993
注册时间
2016-2-16
在线时间
527 小时
发表于 2016-6-7 14:44:51 | 显示全部楼层
马克马克
回复 支持 反对

使用道具 举报

19

主题

84

帖子

0

精华

中级会员

Rank: 3Rank: 3

积分
439
金钱
439
注册时间
2016-6-8
在线时间
47 小时
发表于 2016-6-8 11:14:39 | 显示全部楼层
感谢分享。
回复 支持 反对

使用道具 举报

10

主题

147

帖子

0

精华

高级会员

Rank: 4

积分
602
金钱
602
注册时间
2015-7-11
在线时间
94 小时
发表于 2016-12-14 22:12:21 | 显示全部楼层
谢谢分享!!!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则



关闭

原子哥极力推荐上一条 /2 下一条

正点原子公众号

QQ|手机版|OpenEdv-开源电子网 ( 粤ICP备12000418号-1 )

GMT+8, 2025-5-26 07:34

Powered by OpenEdv-开源电子网

© 2001-2030 OpenEdv-开源电子网

快速回复 返回顶部 返回列表