一、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調用的全過程!