是否有一个“问题”;键入名称";对于C中的函数?
在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; } 函数指针没有标准的类型名,就
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;