这里发生了什么:.h 文件 C 中的 typedef int (*ptr) (void)

what happens here: typedef int (*ptr) (void) in .h file C

我有一段C代码,不明白这里发生了什么:

typedef int (*ptr) (void *ptr2, const char *name);

我理解的是 typedef int (*ptr) 部分,但是在 second() 中发生了什么?我看到一些问题是相反的:typedef void (*ptr) (int),这是相似还是不同(以及如何)?我不是最擅长 C 语言的人,所以我想也许 *ptr 现在指向声明了 *ptr2 和 *name 的函数,或者 *ptr 现在指向 *ptr2 和 *name?

如果有人能给我解释一下就好了。提前致谢!

如果你有一个像

这样的函数声明
int f( void *ptr2, const char *name );

(可以看出函数类型是int( void *, const char * ))然后指向函数的指针看起来像

int ( *pf )( void *, const char * ) = f;

指针的类型pfint ( * )( void *, const char * )。即指针 pf 现在包含函数的地址 f.

要为此函数指针类型引入别名,您可以编写

typedef int (*ptr) (void *ptr2, const char *name);

在这种情况下,上面的指针声明 pf 看起来像

ptr pf = f;

也就是简化了指针的声明。

注意作为指针初始化的函数名被隐式转换为指向函数的指针。那就是你可以写

ptr pf = &f;

但由于隐式转换,写

就足够了
ptr pf = f;