C中的功能指针错误

DD2*_*D24 0 c pointers function

在一本书中,我遇到了以下问题.我面临的问题是,什么是函数指针?它是如何工作的以及它声明的语法是什么.

将错误指向给定代码.

main()
{
    int (*p)()=fun;
    (*p)();
}
fun()
{
    printf("Hi..");
}
Run Code Online (Sandbox Code Playgroud)

我的第一个问题是,下面的代码snipet表示什么?

int (*p)()=fun;
(*p)();
Run Code Online (Sandbox Code Playgroud)

第二个明显的问题是给定代码中的错误是什么.??

请参阅ionela.voinescu的解决方案答案..它与解决方案手册中的内容相同

Mat*_*ine 5

int (*p)() = fun声明一个指向返回函数的指针int,然后将该函数的地址赋给该fun指针.(*p)()调用任何函数p指向的函数.

代码问题:

  1. fun并且main应该有一个返回类型.您的编译器可能不会要求它并假设它们返回ints,但您应该给它们一个.

  2. 您需要在fun上面声明main,或使用原型

而且,(*p)()是不必要的; 你可以使用p().

作为旁注,因为函数指针语法比较丑陋,所以看到typedef是很常见的

typedef int(*IntFunc)();
Run Code Online (Sandbox Code Playgroud)

这将允许您声明和使用p如下:

IntFunc p = fun;
p();
Run Code Online (Sandbox Code Playgroud)

  • 在C标准中,没有参数由(void)表示,()表示未指定的参数数. (2认同)