1、指针函数
指针函数,格式为 返回值类型 + *号 + 函数(形参),例如 int* fun(void);指针函数通俗的解释就是指针的函数 ,主体是函数,与普通函数的区别就是返回值为指针;
2、函数指针
函数指针,格式为 返回值类型 +(*函数名) (形参),例如 int (*fun)(unsigned char i);函数指针的通俗解释就是函数的指针 ,主体是指针,与普通指针的区别就是函数指针指向的地址存储的是一个函数;
2.1、函数指针数组与用法
函数指针同样可以跟数组套娃,即 int (*fun【2】)(形参) = {fun1,fun2};利用枚举的连续编码的特性用来充当函数指针数组的下标,可以形象的使用某个函数,首先我们把led的控制函数顺序的放到函数指针数组中;我们想调用某个函数如led3控制函数;由于数组的下标跟枚举的下标是一致的,所以我们想开启led3控制函数,直接调用数组fun【】然后他的下标填上枚举为3的别称LED3;即fun【LED3】(1);通过形参0或1开关对应的led,这样表达的更直观;
enum
{
LED1;
LED2;
LED3;
LED_SUM
}
unsigned char (*fun[LED_SUM])(unsigned char sta) = {LED1_Crtl;LED2_Crtl;LED3_Crtl};
void LED1_Crtl(unsigned char sta);
void LED2_Crtl(unsigned char sta);
void LED3_Crtl(unsigned char sta);
int main()
{
fun[led1](1);//直观的定位到所需函数和达到想要的条件;
while(1);
}
void LED1_Crtl(unsigned char sta)
{
if(sta)
{
GPIO_SetBits(LED1_PORT,LED1_PIN);
}
else
{
GPIO_ResetBits(LED1_PORT,LED1_PIN);
}
}
void LED2_Crtl(unsigned char sta)
{
if(sta)
{
GPIO_SetBits(LED2_PORT,LED2_PIN);
}
else
{
GPIO_ResetBits(LED2_PORT,LED2_PIN);
}
}
void LED3_Crtl(unsigned char sta)
{
if(sta)
{
GPIO_SetBits(LED3_PORT,LED3_PIN);
}
else
{
GPIO_ResetBits(LED3_PORT,LED3_PIN);
}
}