为什么函数指针,函数地址和函数是一样的?

时间:2016-02-12 03:04:54

标签: c++ c

    #include <stdio.h>

    int add(int a, int b)
    {
        int c =a+b;

        return c;
    }

    int main()
    {
        int a=20,b=45;
        int (*p)(int , int);
        p=&add;

        printf("%d\n%d\n%d\n\n",*add,&add,add);
        printf("%d\n%d\n%d\n\n",*add+1,&add+1,add+1);


        return 0;
    }

Outupt是

4199392 4199392 4199392

4199393 4199393 4199393

那么为什么* add,&amp; add,add是相同的? 我也怀疑“添加&#39;像一个数组一样,如果我错了,请纠正我,因为,数组和数组本身的地址是相同的。

2 个答案:

答案 0 :(得分:0)

在C语言中,您可以使用函数执行的唯一操作是调用它或获取其地址。所以,如果你没有打电话,那么你几乎可以拿到它的地址。

答案 1 :(得分:0)

“C11§6.5.6添加运算符”/ 6讨论了添加到指针

  

当向指针添加或从指针中减去具有整数类型的表达式时,结果具有指针操作数的类型。如果指针操作数指向数组对象的元素,....如果结果指向一个数组对象的最后一个元素,那么......

C规范没有定义向函数指针添加整数类型。因此未定义的行为。