p应该是一个函数指针,它所指向的函数的返回值为空void p已经是一个地址了,*(int*)&p看的晕乎乎的,不知道是什么意思 (int *)应该是个强制类型转换,把&p转成指向int的指针,p已经是地址了,&p地址的地址是什么?
3 回答
慕桂英3389331
TA贡献2036条经验 获得超8个赞
#include <stdio.h>
void function1()
{
printf("bt!\n");
}
void (*p)();
void * Function()
{
void (*q)() = function1;
return q;
}
int main()
{
*(int*)&p=(int)Function();
p();
}
万千封印
TA贡献1891条经验 获得超3个赞
Function()是干什么?执行Function函数,该函数的返回值是什么?天知道!
但是(int)将函数执行的结果转换为了整形。
我们先抛开p的原始类型不谈,看表达式*(int*)&p,首先将变量p的首地址转换为整型指针,然后对其求其指向的内容,最后的结果就是将p变量首地址开始的存储空间被视为一个int整数。后面的代码就是把一个int整数写入到p的首地址开始的一个int型变量应该占用的空间内。
然后再看p,p是函数指针变量,最后的结果就是Function()执行后的结果,被存放到了p变量开始的一个int整型的空间内。我们考虑指针和整型的空间大小一样,如果Function()的返回是一个函数指针,那这里就没有信息丢失和转换。最后p()调用函数。
这个转换过程的结果就是,不管Function返回的是什么,都把这个返回值做为一个“void (*p)()”类型的函数来对待,并调用这个函数。
注意Function()函数的指针是Function,而不是Function()。
- 3 回答
- 0 关注
- 1135 浏览
添加回答
举报
0/150
提交
取消