这里发生了什么:.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;
指针的类型pf
是int ( * )( void *, const char * )
。即指针 pf
现在包含函数的地址 f
.
要为此函数指针类型引入别名,您可以编写
typedef int (*ptr) (void *ptr2, const char *name);
在这种情况下,上面的指针声明 pf
看起来像
ptr pf = f;
也就是简化了指针的声明。
注意作为指针初始化的函数名被隐式转换为指向函数的指针。那就是你可以写
ptr pf = &f;
但由于隐式转换,写
就足够了
ptr pf = f;
我有一段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;
指针的类型pf
是int ( * )( void *, const char * )
。即指针 pf
现在包含函数的地址 f
.
要为此函数指针类型引入别名,您可以编写
typedef int (*ptr) (void *ptr2, const char *name);
在这种情况下,上面的指针声明 pf
看起来像
ptr pf = f;
也就是简化了指针的声明。
注意作为指针初始化的函数名被隐式转换为指向函数的指针。那就是你可以写
ptr pf = &f;
但由于隐式转换,写
就足够了ptr pf = f;