标题: ((void(code *)(void))0x0000)();这句是什么意思?怎么理解的? [打印本页]

作者: Listen丶51    时间: 2018-2-2 15:58
标题: ((void(code *)(void))0x0000)();这句是什么意思?怎么理解的?
((void(code *)(void))0x0000)();这句是什么意思?怎么理解的?  

作者: web11234    时间: 2018-2-3 04:37
这是什么呀  看着像函数指针 又不像
作者: 无线电菜虫    时间: 2018-2-3 09:24
首先去括号得到(void(code *)(void))0x0000,这句话很明显是把0x0000强制类型转换成某个东西。
然后再去括号得到void(code *)(void),这句话的意思是一个函数指针类型,无参数,无返回值。
整体的意思是把0x0000当做一个无参数无返回值的函数指针,再对这个函数进行调用。
其作用就是调用0x0000位置处存放的某个函数代码
作者: Listen丶51    时间: 2018-2-5 08:41
无线电菜虫 发表于 2018-2-3 09:24
首先去括号得到(void(code *)(void))0x0000,这句话很明显是把0x0000强制类型转换成某个东西。
然后再去括 ...

嗯,执行这个可以回到程序一开始的位置,但是我看不明白这句话的意思
作者: wacke    时间: 2018-2-16 21:47
把0x0000地址强行转换成函数指针,并执行。
对于51,0x0000放的是复位中断向量。就是单片机上电后最开始执行的代码。
你的这个指令相当于MCU重新开始执行。
作者: 15156082645    时间: 2019-7-24 13:27
mcu重启的
作者: smarttran    时间: 2019-7-24 16:27
这个语句的出处应该是STC芯片里面参考代码,用于读取芯片ID号的。




欢迎光临 (http://www.51hei.com/bbs/) Powered by Discuz! X3.1