0

任何人都可以请。解释下面的 c 程序是如何工作的:特别是函数 'fun' 是如何分配给的(*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;
}
4

2 回答 2

4

每个函数都存在于内存中的某个地方。该声明:

int (*p)() = fun;

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

(*p)();

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

互联网上到处都是关于“函数指针”的信息。

于 2012-09-13T18:49:18.513 回答
2

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

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

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

于 2012-09-13T18:46:14.293 回答