让程序跳转到绝对地址0x100000去执行?
我在网上看面试题目的时候发现一个题目:让程序跳转到绝对地址0x100000去执行??答案:((void(*)())0x100000)();可是答案不理解:我的理解是,这个...
我在网上看面试题目的时候发现一个题目:
让程序跳转到绝对地址0x100000去执行??
答案: ((void (*)())0x100000)() ;
可是答案不理解:
我的理解是,这个问题肯定用函数指针来调用,从0x100000地址开始.
函数指针原型为void (*ptr)();
把0x100000强制转换为对应ptr的地址指针, 应该是 void * 0x100000;
套到函数原型上, 不就是void (*(void *0x100000))() 吗? 我又哪里错了???
来人啊!!!!
有没有人啊!!! 展开
让程序跳转到绝对地址0x100000去执行??
答案: ((void (*)())0x100000)() ;
可是答案不理解:
我的理解是,这个问题肯定用函数指针来调用,从0x100000地址开始.
函数指针原型为void (*ptr)();
把0x100000强制转换为对应ptr的地址指针, 应该是 void * 0x100000;
套到函数原型上, 不就是void (*(void *0x100000))() 吗? 我又哪里错了???
来人啊!!!!
有没有人啊!!! 展开
1个回答
展开全部
把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从中间剥开来并剁掉了, 为啥为啥为啥?
追答
语法规则而已。强制转换跟声明是完全不同的东西
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询