函数的声明:
void a_handle(uint8_t data8,uint16_t data16)
{
}
指针函数的声明:
void *b_handle(uint8_t data8,uint16_t data16)
{
}
函数指针
void (* fun_p)(uint8_t data8,uint16_t data16);
fun_p = & a_handle; //指针和函数a的形成和返回值必须是一样,
void *(* funb_p)(uint8_t data8,uint16_t data16);
funb_p = & b_handle; //指针和函数a的形成和返回值必须是一样,
函数指针数组
void (*func_table[])(uint8_t,uint16_t)=
{
a_handle,
};
个人理解:
void *b_handle(uint8_t data8,uint16_t data16)容易理解成指针,其实这是函数,中间的*优先和void结合声明成函数返回值了,要想声明成指针,加一个(),让*和变量先结合,声明成指针,
函数指针就成了void (*b_handle)(uint8_t data8,uint16_t data16);
如果要变成函数指针数组,一般是添加[]表示数组,那就在变量的后面添加[];
void (*b_handle[])(uint8_t data8,uint16_t data16);这就成了函数指针数组。
比较容易理解错误的地方
指针函数是返回指针的函数;本质是一个函数,
例如void *b_handle(uint8_t data8,uint16_t data16)
函数指针是指向函数的指针,本质是一个指针;
例如void (*b_handle)(uint8_t data8,uint16_t data16)