什么是int(* fp)()

时间:2019-02-06 08:13:34

标签: c

我不熟悉以下struct

的语法
struct fp {
  int (*fp)();
}

什么是int (*fp)()?我知道这是一个integer,而*fp是一个指针,但是我不明白(*fp)()中括号的含义。

4 个答案:

答案 0 :(得分:4)

fp是带有空参数列表的函数的指针。

int myfunc()    //define function
{
    return 0;
}

struct fp    //define structure
{
  int (*fp)();
} mystruct;
mystruct.fp = &myfunc;    //assign function pointer to structure element

int a = mystruct.fp();    //Call function through pointer

有许多读取C声明的方法,在某些情况下可能非常复杂。开始阅读https://parrt.cs.usfca.edu/doc/how-to-read-C-declarations.html

您可以在Google上搜索“如何读取c声明”,以获取更深入的解释和更多提示。

正如Swordfish所指出的那样,使用空参数列表暗示了关于函数定义的其他明智之处,这可能值得深究。有关功能定义的要点,请参阅下面的Swordfish评论。

我只会引用§6.11.6函数声明符(属于§6.11未来语言说明):

  

带空括号的函数声明符的使用(不是   原型格式参数类型声明符)是过时的   功能。

答案 1 :(得分:2)

它是function pointer。如果您是初学者,它们功能强大且难以引起您的注意。

答案 2 :(得分:1)

它是变量fp的声明,它是一个pointer to a function,它返回一个整数并接受一个unspecified list of arguments

答案 3 :(得分:1)

这是一个包装功能指针的结构。

在这里看看:How do function pointers in C work?