1.假设我们的交通信号灯控制器有以下三个状态:绿灯状态、黄灯状态和红灯状态。在绿灯状态下,我们可以选择进入黄灯状态或红灯状态。在黄灯状态下,我们等待一段时间,然后返回到红灯状态。
2.Code
点击查看代码
#include <stdio.h>
#include <unistd.h>
// 定义状态枚举类型
typedef enum {
STATE_GREEN,
STATE_YELLOW,
STATE_RED
} State;
// 状态转移函数
State greenToYellow() {
printf("Green -> Yellow\n");
sleep(1); // 等待 1 秒钟
return STATE_YELLOW;
}
State greenToRed() {
printf("Green -> Red\n");
return STATE_RED;
}
State yellowToRed() {
printf("Yellow -> Red\n");
return STATE_RED;
}
State redToGreen() {
printf("Red -> Green\n");
return STATE_GREEN;
}
// 状态转移函数数组
State (*stateTransitions[])(void) = {
greenToYellow,
greenToRed,
yellowToRed,
redToGreen
};
int main() {
State currentState = STATE_GREEN;
while (1) {
printf("Current state: %d\n", currentState);
currentState = stateTransitions[currentState]();
}
return 0;
}
3.详解
状态转移函数数组使用了函数指针数组,可参考如下使用方法
点击查看代码
int add(int a, int b) {
return a + b;
}
int subtract(int a, int b) {
return a - b;
}
int multiply(int a, int b) {
return a * b;
}
int divide(int a, int b) {
return a / b;
}
int (*mathFuncs[4])(int, int) = {add, subtract, multiply, divide};