回 帖 发 新 帖 刷新版面

主题:帮忙分析这样为什么不可以

#include<stdio.h>
void function()
{
    printf("call function!\n");
}
int main()
{
    void (*p)();
    *(int*)&p=(int)function;
    (*p)();
    return 0;
}
*(int*)&p=(int)function为甚么这里不能直接用(int)p=(int)function;

回复列表 (共4个回复)

沙发

这里*(&p)不就是p吗?还有&p的类型为什么是int*  ?

板凳

直接
p = function;
就可以了,这是同类型指针的赋值

(int)p=(int)function;
这个不符合语法,(int)p不能当等式的左值

*(int*)&p=(int)function;
这个太折腾了,转来转去的,还不保险

3 楼

后来试了下改为p=function;或者p=&function;效果跟*(int*)&p=(int)function一样;看来我不懂得还是*(int*)&p=(int)function

4 楼

就是把p的地址(函数指针的地址)解释为int指针类型的地址,再解引用,这样就成为一个int型的变量了

我来回复

您尚未登录,请登录后再回复。点此登录或注册