c赋值运算符=

时间:2012-09-13 18:41:18

标签: c

任何人都可以。解释以下c程序的工作原理: 具体来说,如何为(*p)() = fun指定“乐趣”功能;我需要知道编译器如何编译这段代码。

#include<stdio.h>
int fun(); /* function prototype */

int main()
{
    int (*p)() = fun;
    (*p)();
    return 0;
}
int fun()
{
    printf("Hello World\n");
    return 0;
}

2 个答案:

答案 0 :(得分:3)

每个函数都存在于某个内存中。声明:

int (*p)() = fun;

将函数fun的内存位置分配给p。这一行:

(*p)();

正在调用p指向的内存位置中存在的函数。

Interweb充满了关于“函数指针”的信息。

答案 1 :(得分:2)

如果您查看gcc生成的代码(-O0):

    movl    $_fun, -4(%ebp)
    movl    -4(%ebp), %eax
    call    *%eax 

它将fun函数的地址存储在堆栈中的变量中,然后简单地间接调用该地址。