((void (*)(void))(*(int *)(p + 4)))();这句话怎么理解
2个回答
展开全部
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)))()
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)))()
展开全部
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进行赋值操作,这个是最大的区别.
*((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))结合起来~~~
本回答被网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询