| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 539 人关注过本帖
标题:这句话如何理解?
只看楼主 加入收藏
xzy199999
Rank: 4
等 级:业余侠客
帖 子:326
专家分:286
注 册:2010-11-19
结帖率:92.45%
收藏
已结贴  问题点数:15 回复次数:4 
这句话如何理解?
*((void (*)( ))0x100000 ) ( );如何理解?
答案:首先要将0x100000强制转换成函数指针,即:
(void (*)())0x100000
然后再调用它:
*((void (*)())0x100000)();
用typedef可以看得更直观些:
typedef void(*)() voidFuncPtr;
*((voidFuncPtr)0x100000)();
我还是不能理解(void (*)())0x100000怎么是函数指针了?函数名字是什么,参数是什么,函数体又是什么呢?0x100000再这函数中又是什么呢?
搜索更多相关主题的帖子: 如何 
2010-12-10 15:21
laoyang103
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:内蒙古包头
等 级:贵宾
威 望:19
帖 子:3082
专家分:11056
注 册:2010-5-22
收藏
得分:15 
*((void (*)( ))0x100000 ) ( );
你要知道怎样定义函数指针
比如说有一种函数返回值为空参数为空   这就唯一确定了一种函数类型
typedef void (*pfun)()
那么pfun就是指向这样一类函数的指针类型
先看里面的部分
(void (*)( ))0x100000
这还是一种强制转化  要把0x100000这个数转化成前面的类型
而前面的类型就是指向返回值为空参数为空的指针类型  所以(void (*)( ))0x100000
这个表达式就是一个函数的指针了  那么前面再加个*,*((void (*)( ))0x100000 )这个东西
我感觉什么都不是了 因为调用函数是 “函数地址+()”这种格式
我觉得调用应该是 ((void (*)( ))0x100000)()这才是调用函数   
如果你觉得有问题   欢迎和我探讨  QQ 553069938



                                         
===========深入<----------------->浅出============
2010-12-10 17:13
pragma
Rank: 1
等 级:新手上路
帖 子:5
专家分:3
注 册:2010-12-4
收藏
得分:0 
这个xzy199999整天在这弄这些别扭的玩意乱发,告诉你这些在工作的时候一点也用不到,你从那弄得这些
2010-12-10 22:13
xzy199999
Rank: 4
等 级:业余侠客
帖 子:326
专家分:286
注 册:2010-11-19
收藏
得分:0 
回复 3楼 pragma
网上找的啊,那你说工作中用到的都是什么

我是初学者
2010-12-11 15:40
xzy199999
Rank: 4
等 级:业余侠客
帖 子:326
专家分:286
注 册:2010-11-19
收藏
得分:0 
顶顶

我是初学者
2010-12-12 05:54
快速回复:这句话如何理解?
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.020755 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved