((void (*)(void))(*(int *)(p + 4)))();这句话怎么理解

 我来答
百度网友0420ee539
2021-09-25
知道答主
回答量:1
采纳率:0%
帮助的人:444
展开全部
1)这是个函数,即:()(),前一个()的内容是(void (*)(void))(*(int *)(p + 4)),后一个()与前一个联系起来,就是函数名后的括号;
2)(void (*)(void))是一个函数指针;
3)((void (*)(void))m表示将m强制转换成函数指针类型,这里m=(*(int *)(p + 4))
4)(int *)(p + 4)表示将(p+4)的值强制转换成Int指针类型,p+4这个地址存储的值为int类型的n,即n=(int *)(p + 4)
5)(*(int *)(p + 4)),将n=(int *)(p + 4)代入,则为(*n),其含义是取n为地址的存储器的值
6)这样,总的含义就是:一个存储器的地址为p+4,此地址存储的值为整数a,而a又是另一个存储器b的地址,而b存储器中的值是一个以(void (*)(void)为类型的函数指针,我们以这个函数指针为函数名设计了一个没有参数的函数,即:((void (*)(void))(*(int *)(p + 4)))()
你猜我猜哇擦猜
2015-09-17 · TA获得超过2.8万个赞
知道大有可为答主
回答量:2万
采纳率:0%
帮助的人:6719万
展开全部
void *p; //定义p为通用指针型变量,p可以保存char型,int型,结构体等类型数据的地址,需要进行类型的强制转换
*((int *)p)=4; //这里的(int *)p,是将p强制转换为保存int型数据的地址变量,最前面这个*,是对已经转换为保存int型数据的地址变量取其内容,这句的作用是地址p所指向内容为4.

int a=5;
void *p=(void *)&a; //&a表示取a的地址,其前面的(void*)表示将a的地址强制转换为通用的地址类型,然后(void *)&a;这个地址赋值给通用的地址类型变量p.

前者是对*p进行赋值操作;后者是对p进行赋值操作,这个是最大的区别.
追问
这个应该是个指针函数,不知道怎么和((void *)(*)(void))结合起来~~~
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式