以下函数typedef
之间有什么区别:
typedef void tbl_opt (void *tbl_item, void *tbl_param); // 1
typedef void *tbl_opt (void *tbl_item, void *tbl_param); // 2
typedef void (*tbl_opt) (void *tbl_item, void *tbl_param); // 3
typedef (void *) (*tbl_opt) (void *tbl_item, void *tbl_param); // 4
通常,我使用第3& 4,但我在一本书中看到了另外两本,我不太清楚。
[更新] 摘要:
似乎在定义类型为1或2的情况下,当使用该类型时,仍然需要声明一个指针变量,并将其初始化为指向另一个实际函数,所以我猜这就是为什么情况3& 4更受欢迎。
答案 0 :(得分:4)
typedef to:
答案 1 :(得分:3)
3和4是功能指针:
返回void或no的函数,并带有两个void *参数
typedef void tbl_opt (void *tbl_item, void *tbl_param);
返回void *并接受两个void *参数的函数
typedef void *tbl_opt (void *tbl_item, void *tbl_param);
指向返回void或no的函数的函数指针,并带有两个void *参数
typedef void (*tbl_opt) (void *tbl_item, void *tbl_param);
指向返回void *并带有两个void *参数
的函数的函数指针typedef (void *) (*tbl_opt) (void *tbl_item, void *tbl_param);