在C语言中可以定义一个函数指针,但是指针指向的内容是否有“类型名”?
要详细说明,可以用一个类型定义代替void (*fubar)(void)
,以便可以将fubar
声明为Frob* fubar
?
答案 0 :(得分:5)
没有像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
以此方式工作,它可以将变量声明(无初始值设定项)转换为类型别名。
答案 1 :(得分:1)
typedef void (*fubar_p)(void);
或
void typedef (*fubar_p)(void);
或
typedef void (fubar)(void);
或
void typedef (fubar)(void);
那你就可以做
fubar_p fun_p;
或
fubar *fun;
在两种情况下,fun
和fun_p
的含义相同,指向函数的指针不带参数且不返回任何值。
答案 2 :(得分:0)
只需对它进行类型定义。
typedef void(*Frob)(void);
void f(void)
{
// your code goes here
}
int main()
{
Frob fubar = f;
fubar();
return 0;
}