C语言中 *(void (*)(void))0xa0001000; 什么意思?

whz_20021423 2008-04-03 09:49:25
C语言中 *(void (*)(void))0xa0001000; 什么意思?

有高手说是 定义一个指向数组的指针 为什么是这样呢???
...全文
443 21 打赏 收藏 转发到动态 举报
写回复
用AI写文章
21 条回复
切换为时间正序
请发表友善的回复…
发表回复
yangb2014# 2008-04-06
  • 打赏
  • 举报
回复
sorry:错别字,
---------------------------------------------

to 楼上:
bootloader会这么用,
从ROM中把系统映象copy到RAM中,然后从RAM开始运行。。。
yangb2014# 2008-04-06
  • 打赏
  • 举报
回复
to 楼上:
bootloader会这么用,从ROM中把系统影响copy到RAM中,然后从RAM开始运行。。。
yyjzsl 2008-04-06
  • 打赏
  • 举报
回复
要真在工作中,写这样的程序,老板不会喜欢你的。。。
wangbin995 2008-04-06
  • 打赏
  • 举报
回复
[Quote=引用 17 楼 whz_20021423 的回复:]
这里有搞嵌入式的吗??


这条语句是在嵌入式里用的 ,


我也觉得是函数指针,但 出题人信誓旦旦的说是 “指向数组的指针” , 这是为什么呢??



[/Quote]

拿大耳光抽他
whz_20021423 2008-04-06
  • 打赏
  • 举报
回复
这里有搞嵌入式的吗??


这条语句是在嵌入式里用的 ,


我也觉得是函数指针,但 出题人信誓旦旦的说是 “指向数组的指针” , 这是为什么呢??


stude 2008-04-04
  • 打赏
  • 举报
回复
是的啊
vagrantfish 2008-04-04
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 dingmin8701 的回复:]
学习了
[/Quote]
dingmin8701 2008-04-04
  • 打赏
  • 举报
回复
学习了
Akron 2008-04-04
  • 打赏
  • 举报
回复
(void (*)(void))0xa0001000 是把 0xa0001000 强制成函数指针(程序地址),而
* (void (*)(void))0xa0001000 则为通过函数指针运行函数。因而
* (void (*)(void))0xa0001000 是从 0xa0001000 地址处运行程序。
billy1985 2008-04-04
  • 打赏
  • 举报
回复
就是一个函数指针
sailinghz 2008-04-04
  • 打赏
  • 举报
回复
首先看这个声明void (*pf)(void); 这个是对一个函数指针的声明,其中pf是指向一个返回值为void类型函数的指针,这个函数的参数也是void类型。由此可见(void (*)(void))是一个类型,表示的是一个“指向返回值为void类型的函数的指针”的类型转换符。所以,*(void (*)(void))0xa0001000是表示将0xa0001000转换成一个指向(void (*)(void))类型的指针。
若是不明白的话,可以看《C语言陷阱与缺陷》的第二章语法陷阱,里面有详细的介绍
用户 昵称 2008-04-04
  • 打赏
  • 举报
回复
这是函数指针
ONLYBLUEMOON 2008-04-04
  • 打赏
  • 举报
回复
兄弟。说具体点。
长安宁 2008-04-04
  • 打赏
  • 举报
回复
上面也可以写成 pp *pc=(pp *)0xa0001000的展开形式而已;
长安宁 2008-04-04
  • 打赏
  • 举报
回复
*(void (*)(void))0xa0001000;

typedef void ( *pp)(void); //这个声明你能理解吗?这里的pp 是一个指向(返回值是 void ,形参是void 的函数的)指针;

那么 int a=3;int p=(int)a; //这种格式的强制转换很容易理解吧;
pp *pc = (pp *)(void (*)(void))0xa0001000; //这里只不过是一个把一个东西(0xa0001000),强制转换的例子;很好理解;

Akron 2008-04-03
  • 打赏
  • 举报
回复
一句话:从 0xa0001000 地址处运行程序。
evanever 2008-04-03
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 ttkk_2007 的回复:]
这是把0xa0001000转换成一个函数指针(返回void,参数为void),然后提取函数入口地址
[/Quote]
恩 是的。
Inhibitory 2008-04-03
  • 打赏
  • 举报
回复
推荐看C语言陷阱,里面对(void (*)(void)0)()这个讲得很清楚,如果看懂了,再看这个就不成问题了.
liuzewei 2008-04-03
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 ttkk_2007 的回复:]
这是把0xa0001000转换成一个函数指针(返回void,参数为void),然后提取函数入口地址
[/Quote]

HOHO,支持```
WingForce 2008-04-03
  • 打赏
  • 举报
回复
我怎么看到一个函数指针捏。。。
加载更多回复(1)

69,381

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧