让程序跳转到绝对地址0x100000去执行?

我在网上看面试题目的时候发现一个题目:让程序跳转到绝对地址0x100000去执行??答案:((void(*)())0x100000)();可是答案不理解:我的理解是,这个... 我在网上看面试题目的时候发现一个题目:
让程序跳转到绝对地址0x100000去执行??
答案: ((void (*)())0x100000)() ;

可是答案不理解:
我的理解是,这个问题肯定用函数指针来调用,从0x100000地址开始.
函数指针原型为void (*ptr)();
把0x100000强制转换为对应ptr的地址指针, 应该是 void * 0x100000;
套到函数原型上, 不就是void (*(void *0x100000))() 吗? 我又哪里错了???
来人啊!!!!

有没有人啊!!!
展开
 我来答
zjfaok
2014-03-29 · TA获得超过6805个赞
知道大有可为答主
回答量:4146
采纳率:62%
帮助的人:1575万
展开全部

把0x100000强制转换为对应ptr的地址指针, 应该是 void * 0x100000;

^ 恕我没看懂,不过我猜想要表达的意思是错的


((void (*)())0x100000)() ;大概可以利用define改写成下面的形式

#define FUNCTION_POINTER_TYPE   void (*)()
#define ADDRESS_AS_FUNCTION     (FUNCTION_POINTER_TYPE)0x100000
#define PARENTHESISED_FOR_CLEAR (ADDRESS_AS_FUNCTION)
PARENTHESISED_FOR_CLEAR()
更多追问追答
追问
看了你的代码, 你代码里强制转换为函数指针是 void (*)(). 如果是这样, 那这个问题就解释的通.

可是, 我不理解为什么 强制转换为函数指针是这样写void (*)()
书上的函数指针原型是 void (*ptr)(); 你上面的强制转换把 ptr从中间剥开来并剁掉了, 为啥为啥为啥?
追答
语法规则而已。强制转换跟声明是完全不同的东西
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式