找回密码
 注册
搜索
查看: 792|回复: 6

[讨论] 请教高手一个嵌入式程序问题

[复制链接]
发表于 2007-10-16 23:04:00 | 显示全部楼层 |阅读模式
最近看田泽出的《嵌入式系统开发与应用》,对里面的一个程序不大懂,请各位高手指教

.........

.........

unsigned int filesize;

void *mallocPt=Image_RW_Limit;

void(*restart)(void)=(void(*)(void))0x0;

void(*run)(void)=(void(*)(void))DOWNLOAD_ADDRESS;

.........

在这两句中

void(*restart)(void)=(void(*)(void))0x0;

void(*run)(void)=(void(*)(void))DOWNLOAD_ADDRESS;

都用到了(void(*)void),我对这个不大懂,请高手指点一下,到底是什么意思?
 楼主| 发表于 2007-10-17 11:37:43 | 显示全部楼层
坛里的高手怎么都不说话啊?请高手帮忙指点一下,这个语句
void(*run)(void)=(void(*)(void))DOWNLOAD_ADDRESS
为什么要连续用两个void啊?第二个void有什么作用呢?
点评回复

使用道具 举报

发表于 2007-10-17 13:54:17 | 显示全部楼层
帮你顶一下吧,我也不会[em06]
点评回复

使用道具 举报

发表于 2007-10-17 14:01:16 | 显示全部楼层
(void(*)(void))DOWNLOAD_ADDRESS是把DOWNLOAD_ADDRESS强制转换成函数型指针类型。

void(*restart)(void)=(void(*)(void))0x0
void(*run)(void)=(void(*)(void))DOWNLOAD_ADDRESS;
这两句的意思就是使restart函数型指针指向地址0x0,run函数型指针指向地址DOWNLOAD_ADDRESS。
点评回复

使用道具 举报

发表于 2007-10-17 21:19:38 | 显示全部楼层
括号里void表示空参数表。把void换成int理解一下?
点评回复

使用道具 举报

发表于 2007-10-19 14:39:01 | 显示全部楼层
(void(*)(void))DOWNLOAD_ADDRESS
DOWNLOAD_ADDRESS应该是个函数的地址,
这里强制转换为函数指针类型,
该函数的返回值为第一个void,即空,没有返回值,第二个void是指函数参数为空。
点评回复

使用道具 举报

发表于 2007-10-21 10:05:23 | 显示全部楼层
void(*restart)(void)=(void(*)(void))0x0;
等号前面是声明一个返回值为void型,参数也是void的一个函数指针restart,后面是把0x0这个地址强制转化成这种函数指针,然后赋值为restart,这个系统里可能是0x0为系统的启动的入口地址,让restart指向这里。后面一句程序也是类似
点评回复

使用道具 举报

高级模式
B Color Image Link Quote Code Smilies

本版积分规则

Archiver|手机版|小黑屋|52RD我爱研发网 ( 沪ICP备2022007804号-2 )

GMT+8, 2024-10-7 10:21 , Processed in 0.047444 second(s), 18 queries , Gzip On.

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

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