是否有一个“问题”;键入名称";对于C中的函数?

是否有一个“问题”;键入名称";对于C中的函数?,c,function,pointers,C,Function,Pointers,在C语言中,可以定义函数指针,但指针指向的对象是否有“类型名” 为了详细说明,可以使用类型定义来代替void(*fubar)(void),以便将fubar声明为Frob*fubar?只需键入定义即可 typedef void(*Frob)(void); void f(void) { // your code goes here } int main() { Frob fubar = f; fubar(); return 0; } 函数指针没有标准的类型名,就

在C语言中,可以定义函数指针,但指针指向的对象是否有“类型名”

为了详细说明,可以使用类型定义来代替
void(*fubar)(void)
,以便将
fubar
声明为
Frob*fubar

只需键入定义即可

typedef void(*Frob)(void);

void f(void)
{
    // your code goes here
}

int main()
{
    Frob fubar = f;
    fubar();
    return 0;
}

函数指针没有标准的类型名,就像
int
一样。此外,与
struct
一样,没有关键字为它们命名标记的名称空间。相反,如果希望通过名称引用函数原型或函数指针,则需要使用
typedef

考虑以下
typedef

typedef void Frob (void);
如果没有
typedef
关键字,则声明将针对名为
Frob
的函数原型。使用
typedef
,名称
Frob
现在是与原型匹配的函数的类型别名。因此,它可以这样使用:

Frob foo;
Frob *fubar = foo;
void foo (void) { puts(__func__); }
int main (void) { fubar(); }
通常,
typedef
是这样工作的,它可以将变量声明(无初始值设定项)转换为类型别名

typedef void (*fubar_p)(void);

那你就可以了

fubar_p fun_p;


在这两种情况下,
fun
fun\u p
具有相同的含义,指向函数的指针不带参数,也不返回任何内容。

typedef void(Frob)(void);弗罗布*福巴我认为链接到“Typedef函数指针”是错误的,因为这个问题是针对指向的类型,而不是指针.VTRO。重复引用函数指针的类型名。这里为函数寻找一个类型名。细微的差别。这并不能回答问题。问题是将
Frob*fubar
定义为函数指针。在您的例子中,这将成为指向函数指针的指针。除了“星”之外,语法和行为是相同的。为什么这很重要?void typedef(*fubar)(void)
真的正确吗?除了名称之外,它看起来是相同的
void typedef(*fubar_p)(void)
typedef void (fubar)(void);
void typedef (fubar)(void);
fubar_p fun_p;
fubar *fun;