Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/62.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
c赋值运算符=_C - Fatal编程技术网

c赋值运算符=

c赋值运算符=,c,C,有人能解释一下下面的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; } #包

有人能解释一下下面的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;
}
#包括
int fun();/*功能原型*/
int main()
{
int(*p)()=乐趣;
(*p)();
返回0;
}
int fun()
{
printf(“Hello World\n”);
返回0;
}

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


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

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


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

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

int (*p)() = fun;
正在将函数fun的内存位置分配给p。然后,线路:

(*p)();
正在调用存在于p所指向的内存位置的函数


互联网上充满了关于“函数指针”的信息。

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

int (*p)() = fun;
正在将函数fun的内存位置分配给p。然后,线路:

(*p)();
正在调用存在于p所指向的内存位置的函数


互联网上充满了关于“函数指针”的信息。

查找“函数指针”。查找“函数指针”。这样是最快的调用吗?比f()快@tuğrulbüyükı351;ık当然不会,并且在启用优化的情况下,
gcc
会直接使用该程序发出一个
callıu fun
。这种方式是最快的呼叫吗?比f()快@tuğrulbüyükıık当然不会,并且在启用了优化的情况下,
gcc
直接向该程序发出一个
callıu fun