C笔记之函数指针数组的使用
为了对比函数指针的优势便于理解,举例如下:针对状态机的程序实现相当简单,第一种方法是用 swich-case 实现:
void RunTaskN()如果利用了函数指针数组将会使上面的方式更简洁
{
switch (state) {
case 0: state0(); break;
case 1: state1(); break;
…
case M: stateM(); break;
default:
state = 0;
}
}
//首先定义一个函数类型一个小技巧是把第一个状态 state0 设置为空状态,即:
typedef void (*FUNCTIONPTR)();
//初始化函数指针数组
const FUNCTIONPTR[] states = { state0, state1, …, stateM };
//使用
void RunTaskN()
{
(*states[state])();
}
//控制例子
void state0() { }
void state1() { state++; } // next state;
void state2() { state+=2; } // go to state 4;
void state3() { state--; } // go to previous state;
void state4() { delay = 100; state++; }
void state5() { delay--; if (delay <= 0) state++; } //delay 100*tick
void state6() { state=0; } // go to the first state
void state0() { }这样,state =0可以让整个task 停止运行,如果需要投入运行,简单的让 state = 1 即可。
1 个回复
admin
赞同来自: lLvcube
这俩typedef struct彻底颠覆了我对C语言知识。
应用分析:struct是一个结构体,可以用来构造数据类型。所以可以得知这两个struct里面的数据不是函数,而是函数指针,即它是一个指针,指向一个函数。RESULT,uint8_t*,void是函数的返回值类型。