C笔记——typedef和函数指针

在看AMCL源码时,有几处用到函数指针的声明,如下

// Function prototype for the initialization model; generates a sample pose from
// an appropriate distribution.
typedef pf_vector_t (*pf_init_model_fn_t) (void *init_data); // Function prototype for the action model; generates a sample pose from
// an appropriate distribution
typedef void (*pf_action_model_fn_t) (void *action_data, 
                                      struct _pf_sample_set_t* set);

// Function prototype for the sensor model; determines the probability
// for the given set of sample poses.
typedef double (*pf_sensor_model_fn_t) (void *sensor_data, 
                                        struct _pf_sample_set_t* set);

 

pf_init_model_fn_t是声明的新名字,也可以写在最后面

typedef pf_vector_t (*) (void *init_data) pf_init_model_fn_t;
pf_init_model_fn_t是函数指针,(*)后面是的括号是函数的形参,void *表示未知类型的指针,可以指向任意类型的变量; (*)前面pf_vector_t值得是这个函数的返回类型。
 
 
同样理解
typedef void (*) (void *action_data, struct _pf_sample_set_t* set) pf_action_model_fn_t;

pf_action_model_fn_t是函数指针,指向带两个参数的函数,函数无返回类型。

 

在《C和指针》P260有讲函数指针,有两个用途:

1、把函数指针作为参数传递给其他函数,后者会“回调”用户的函数

2、转移表。具体例子见书。

 

posted @ 2021-07-14 10:54  水水滴答  阅读(140)  评论(0编辑  收藏  举报