void (*restart)(void)是一个函数指针。
(void (*)(void))0x0;将0x0这个地址强制转换为一个函数指针。
因为一般的CPU,上电以后就是从0地址开始取址执行。
如果你想搞个软件重启的话,定义void (*restart)(void)=(void (*)(void))0x0;以后。
用这个restart();
就可以跳到cpu上电后第一条指令地址开始执行,正如其名,restart,重启。
void(*restart)(void)=(void(*)(void))0x0;
=左边void(*restart)(void)是申明restart函数指针
=右边将函数指针初始化为空
(void(*)(void))0x0 是将 0x0强制转化为void(*)(void)型函数指针
所以不能写成 void(*restart)=(void(*))0x0;
好比 void * data = (void *)0x0;
但可以这样写:
void(*restart)(void);
restart = (void(*)(void))0x0;
void(*run)(void)=(void(*)(void))DOWNLOAD_ADDRESS;
左边:第一个void 无返回值,第二个void 无输入参数,右边同理。
阅读(2269) | 评论(0) | 转发(2) |