地址的函数指针(c ++)

时间:2016-04-14 15:11:40

标签: function pointers

    int Add(int a, int b)
    {
        return a+b;
    }
    int main()
    {
        int c;
        int (*p)(int,int);
        p = &Add;
        c = p(2,3);
        printf("%d", c);
    }

如上所示,我在函数指针中使用了Add。我希望能够在“& Add”的位置使用地址,例如

int main()
{
    int c;
    int (*p)(int,int);
    p = 0x123456;
    c = p(2,3);
    printf("%d", c);
}

我该怎么做?

2 个答案:

答案 0 :(得分:0)

您只需要将常量强制转换为函数指针类型。像这样

typedef int(*func_t)(int,int);
int main()
{
    int c;
    func_t p;
    p = (func_t)0x123456;
    c = p(2,3);
    printf("%d", c);
}

我鼓励你像我一样输入你的函数类型,因为这样可以更容易理解。

和往常一样,我希望您知道自己在做什么,并且知道该地址是指具有该签名的函数的地址,否则您将调用未定义的行为。

答案 1 :(得分:0)

与通过转换地址声明函数指针的方式相同。

int (*p)(int,int);
p = ( int(*)(int,int) ) 0x123456;