打印
[学习笔记]

如何通过函数指针实现一个花式点灯程序

[复制链接]
990|8
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
gaoyang9992006|  楼主 | 2023-5-25 15:32 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
要通过函数指针实现一个花式点灯程序,你需要以下几个步骤:

定义函数指针类型:首先,你需要定义一个函数指针类型,以便能够指向不同的灯光控制函数。例如,你可以定义一个函数指针类型LightFunction,它接受一个整数参数,并返回 void。
typedef void (*LightFunction)(int);
实现多个灯光控制函数:接下来,你可以实现多个不同的灯光控制函数。每个函数都应该接受一个整数参数,表示需要控制的灯的编号。这些函数可以实现不同的花式点灯效果。以下是一个示例函数,用于点亮指定编号的灯:
void turnOnLight(int lightNumber) {
    // 控制指定编号的灯点亮
    // 实现具体的点亮逻辑
}
你可以根据需要实现其他灯光控制函数,如闪烁、呼吸等等。

创建一个函数指针数组:接下来,你可以创建一个函数指针数组,并初始化它,使每个指针指向相应的灯光控制函数。数组的索引可以对应灯的编号。例如,如果你有10个灯,你可以创建一个函数指针数组lightFunctions:
LightFunction lightFunctions[10];
然后,你可以为数组中的每个元素分别指定相应的灯光控制函数,例如:
lightFunctions[0] = turnOnLight;
// 分配其他函数指针给对应的数组元素
调用函数指针实现点灯:现在,你可以通过调用函数指针来控制灯光。根据你的需求,可以在循环中或其他地方使用函数指针来点亮、闪烁或执行其他花式点灯效果。例如,以下是一个示例循环,依次调用每个灯光控制函数:
for (int i = 0; i < 10; i++) {
    LightFunction currentFunction = lightFunctions[i];
    currentFunction(i); // 传递灯的编号作为参数
}
这样,你就可以根据具体的函数实现和调用逻辑,通过函数指针实现一个花式点灯程序了。记得根据需要添加错误处理和灯光控制函数的实际实现。

使用特权

评论回复

相关帖子

沙发
tpgf| | 2023-6-8 13:31 | 只看该作者
点灯是电子工程师的基本功,就好比是hello world之于软件工程师一般具有神圣而庄严的意义

使用特权

评论回复
板凳
paotangsan| | 2023-6-8 14:16 | 只看该作者
实际上就是在函数的形参那用到了指针是吗

使用特权

评论回复
地板
renzheshengui| | 2023-6-8 14:45 | 只看该作者
这样做的话点灯的函数体岂不是会比较大吗?

使用特权

评论回复
5
wakayi| | 2023-6-8 14:58 | 只看该作者
有一个小小的缺点 就是点灯的花式已经被固化了是吧

使用特权

评论回复
6
wowu| | 2023-6-8 15:31 | 只看该作者
重点在于 通过这个项目加深了对定时器 io以及相关编程技巧的理解

使用特权

评论回复
7
xiaoqizi| | 2023-6-8 15:56 | 只看该作者
感觉指针真的不是那么容易操作  不好理解呀

使用特权

评论回复
8
gaoyang9992006|  楼主 | 2023-6-8 16:30 | 只看该作者
xiaoqizi 发表于 2023-6-8 15:56
感觉指针真的不是那么容易操作  不好理解呀

记住定义的公式即可。然后函数就可以像参数一样作为另外一个函数的参数传入了,有个东东叫:回调函数。

使用特权

评论回复
9
gaoyang9992006|  楼主 | 2023-6-8 16:33 | 只看该作者
wakayi 发表于 2023-6-8 14:58
有一个小小的缺点 就是点灯的花式已经被固化了是吧

不是被固化了,你可以在每个函数里实现不同的花式。只是最后通过函数指针调用它。这样可以将多种花式的函数装载到一个数组里,通过循环调用不同的函数。

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

认证:西安公路研究院南京院
简介:主要工作从事监控网络与通信网络设计,以及从事基于嵌入式的通信与控制设备研发。擅长单片机嵌入式系统物联网设备开发,音频功放电路开发。

1964

主题

15940

帖子

208

粉丝