一、typdef 用法以下所示函数
1 typedef unsigned char uint8_t; 2 typedef unsigned short int uint16_t; 3 typedef unsigned int uint32_t; 4 uint8_t i; //定义一个8位无符号字符型变量
二、指针函数形式ui
1 //定义一个函数指针pfun,指向一个返回类型为int,有一个参数为int的函数
2 int (*pfun)(int) ; 3 //指针层面理解,函数的函数 名是一个指针 4 //指针指向函数在内存中的首地址
5 int shiftfun(int a) 6 { 7 int temp; 8 temp = a; 9 temp<<a; 10 return a; 11 } 12 int main() 13 { 14 int temp; 15 //将函数shiftfun的地址赋值给变量pfun
16 pfun = shiftfun; 17 //*pfun ”显然是取pfun 所指向地址的内容,固然也就是取出了函数shiftfun()的内容,而后给定参数为2。
18 temp = (*pfun)(2); 19 }
三、typedef 返回类型(*新类型)(参数表)spa
1 typedef char (*PTRFUN)(int); 2 PTRFUN pFun; 3 char glFun(int a){ return;} 4 void main() 5 { 6 pFun = glFun; 7 (*pFun)(2); 8 }
由上对typedef void (*Fun) (void);理解指针
typedef 的做用是把已知的类型定义新类型,因此新类型(*Func)(void)的返回值是void。code
定义了一个新类型,该类型是一个函数指针,它指向的函数形参为void,返回值为void。blog
发现51822中有个SPI从机事件回调函数类型事件
1 /** @brief SPI slave event callback function type. 2 * 3 * @param[in] event SPI slave driver event. 4 */
5 typedef void (*nrf_drv_spis_event_handler_t)(nrf_drv_spis_event_t event);
上文代码定义了一个新类型,该类型为*nrf_drv_spis_event_handler_t 的函数指针,它指向的函数形参event为nrf_drv_spis_event_t类型的结构体结构体格式以下所示,返回值为void。内存
1 /** @brief Structure containing the event context from the SPI slave driver. */
2 typedef struct
3 { 4 nrf_drv_spis_event_type_t evt_type; //!< Type of event.
5 uint32_t rx_amount; //!< Number of bytes received in last transaction. This parameter is only valid for @ref NRF_DRV_SPIS_XFER_DONE events.
6 uint32_t tx_amount; //!< Number of bytes transmitted in last transaction. This parameter is only valid for @ref NRF_DRV_SPIS_XFER_DONE events.
7 } nrf_drv_spis_event_t;
回调示例以下所示:回调函数
1 ret_code_t nrf_drv_spis_init(nrf_drv_spis_t const * const p_instance, 2 nrf_drv_spis_config_t const * p_config, 3 nrf_drv_spis_event_handler_t event_handler) //此处该指针函数做为形参
4 { 5 ...... 6 }
定义了一个函数nrf_drv_spis_init,该函数有一个参数event_handler类型为上面定义的新类型nrf_drv_spis_event_handler_t it
1 APP_ERROR_CHECK(nrf_drv_spis_init(&spis, &spis_config, spis_event_handler)); //调用以上函数传参spis_event_handler
此处调用这个nrf_drv_spis_init函数,传入参数为spis_event_handler
1 void spis_event_handler(nrf_drv_spis_event_t event) 2 { 3 ...... 4 }
追踪到参数spis_event_handler,发现它指向的函数形参event 为nrf_drv_spis_event_t类型的结构体,返回值为void。与上面定义函数指针类型相同。
以上即是定义一个新类型的函数指针nrf_drv_spis_event_handler_t 指向的函数spis_event_handler该函数格式为(函数形参event 为nrf_drv_spis_event_t类型的结构体,返回值为void),做为一个参数event_handler,被另外一个函数nrf_drv_spis_init调用的全过程!