目录
函数指针
最简单的例子
稍作修改例子
引入协议栈的函数指针
引入协议栈第二处函数指针
函数指针
该协议栈中使用到函数指针,现开展一篇专门存放函数指针的文章。
C语言的函数指针是指向函数的指针变量,可以用来存储和调用函数的地址。在C语言中使用函数指针可以实现以下几种功能:
作为函数的参数:函数指针可以作为参数传递给其他函数,使得可以在调用函数时动态指定要执行的函数。
作为函数的返回值:函数指针可以作为函数的返回值,返回指向函数的地址。
作为数组元素:可以使用函数指针数组来存储多个函数的地址,便于根据需要选择执行某个函数。
最简单的例子
#include <stdio.h>typedef void (*FuncPtr)(int); // 声明一个函数指针类型/* 定义两个函数,用于演示函数指针的操作 */
void func1(int num)
{printf("This is function 1 with argument %d\n", num);
}void func2(int num)
{printf("This is function 2 with argument %d\n", num);
}int main()
{// 声明函数指针变量FuncPtr ptr;// 将函数地址赋值给函数指针变量ptr = func1;// 通过函数指针调用函数ptr(10);// 将函数地址赋值给函数指针变量ptr = func2;// 通过函数指针调用函数ptr(20);return 0;
}
稍作修改例子
为了更贴合协议栈的函数指针,稍加修改例子。
typedef enum
{MB_EX_NONE = 0x00,MB_EX_ILLEGAL_FUNCTION = 0x01,MB_EX_ILLEGAL_DATA_ADDRESS = 0x02,MB_EX_ILLEGAL_DATA_VALUE = 0x03,MB_EX_SLAVE_DEVICE_FAILURE = 0x04,MB_EX_ACKNOWLEDGE = 0x05,MB_EX_SLAVE_BUSY = 0x06,MB_EX_MEMORY_PARITY_ERROR = 0x08,MB_EX_GATEWAY_PATH_FAILED = 0x0A,MB_EX_GATEWAY_TGT_FAILED = 0x0B
} eMBException;typedef eMBException ( *pxMBFunctionHandler )( UCHAR * pucFrame, USHORT * pusLength );// 定义一个函数,其参数和返回值类型符合函数指针的定义
eMBException myFunctionHandler(UCHAR * pucFrame, USHORT * pusLength)
{// 在这里编写你的函数逻辑// ...
}int main()
{// 声明一个指向函数的指针,并将其指向具体的函数pxMBFunctionHandler myHandler = myFunctionHandler;// 调用函数指针指向的函数UCHAR frame;USHORT length;eMBException result = myHandler(&frame, &length);// 对返回结果做进一步处理// ...return 0;
}