在学习蓝牙模块CC254X芯片,理解蓝牙BLE协议栈例程SimpleBLECentral的时候,由于我对函数指针,回调函数等比较陌生,导致难以理解蓝牙架构流程,所以整理了从最初的指针函数,到指针函数与数组,结构体等关联的范例。
其中,第1到第4点,在Visual C++6.0软件上编译测试过。
第5点为蓝牙BLE协议栈例程SimpleBLECentral中浓缩精简出来的一段,以方便学习该代码中的妙用。已检测无语法错误警告,亦可在Visual C++6.0软件上编译。
1、指针函数直接作为实体函数的输入参数
#include <stdio.h>
//定义两个显示函数
void Display()
{
printf("This is Display.\n");
}
void Show()
{
printf("Hellow World!\n");
}
//定义一个输入为“函数指针”的函数
void test(void (* fnPerform)())
{
fnPerform();
}
int main(void)
{
test(Display);
test(Show);
return 0;
}
2、指针函数指向函数地址的具体指针调用
#include <stdio.h>
typedef void (* fnPerform_t)(int a, int b); // 声明定义函数指针
static void add(int a, int b); // 声明“加函数”
fnPerform_t Testcb = add; // 指针函数指向“加函数”地址
int main(void)
{
int j = 8, k = 6;
Testcb(j,k);
return 0;
}
//“加函数”的具体内容
static void add(int a, int b)
{
int c = 0;
c = a + b;
printf ("%d=%d+%d \n",c,a,b);
}
3、函数指针指向数组函数
#include <stdio.h>
// 声明定义函数指针
typedef unsigned short (* SimpleTaskInfo)(unsigned char taskCnt, unsigned short event);
// 任务函数声明
static unsigned short Task1(unsigned char a, unsigned short b);
static unsigned short Task2(unsigned char a, unsigned short b);