最近在看一些開源項目,大佬的思路還是很值得去學(xué)習(xí),今天就簡單介紹一下單鏈表的應(yīng)用,配合回調(diào)函數(shù)可以玩出新花樣,廢話不多說直接看代碼!
| 頭文件
#include "stdio.h"
#include "stdint.h"
typedef struct sensor
{
uint8_t flag;
void (*callback)(void);
struct sensor* next;
}sensor_t;
extern sensor_t sensor1;
extern sensor_t sensor2;
extern sensor_t sensor3;
void sensor1_callback(void);
void sensor2_callback(void);
void sensor3_callback(void);
void sensor_init(sensor_t* handle, void(*callback)(void));
void sensor_start(sensor_t* handle);
void sensor_handle(void);
| 源碼
// 鏈表頭指針
static sensor_t* head_handle = NULL;
// 創(chuàng)建對象
sensor_t sensor1;
sensor_t sensor2;
sensor_t sensor3;
// 回調(diào)函數(shù)
void sensor1_callback(void)
{
printf("sensor1!\\r\\n");
}
void sensor2_callback(void)
{
printf("sensor2!\\r\\n");
}
void sensor3_callback(void)
{
printf("sensor3!\\r\\n");
}
// 傳感器初始化
void sensor_init(sensor_t* handle, void(*callback)(void))
{
handle->callback = callback;
handle->flag = 0x00;
sensor_start(handle);
}
// 傳感器開始(往鏈表添加節(jié)點)
void sensor_start(sensor_t* handle)
{
sensor_t* target = head_handle;
if(head_handle == NULL)
{
/* 鏈表為空 */
head_handle = handle;
handle->next = NULL;
}
else
{
/* 鏈表中存在節(jié)點,遍歷找最后一個節(jié)點 */
while(target->next != NULL)
{
/* 去掉重復(fù)節(jié)點 */
if(target == handle){
break;
}
target = target->next;
}
target->next = handle;
handle->next = NULL;
}
}
// 傳感器處理(遍歷鏈表)
void sensor_handle(void)
{
sensor_t* target = head_handle;
while(target != NULL)
{
target->callback();
target = target->next;
}
}
| 運用
int main()
{
sensor_init(&sensor1,sensor1_callback);
sensor_init(&sensor2,sensor2_callback);
sensor_init(&sensor3,sensor3_callback);
sensor_handle();
while (1)
{
/* code */
}
}
這個寫法是理論上只會受限于內(nèi)存大小,理想狀態(tài)下可以無限創(chuàng)建對象,通過綁定回調(diào)函數(shù),能在一定程度上解決調(diào)用耦合的問題!
--END--
收錄于合集 **#**c語言
2個
上一篇C語言|void 指針
-
代碼
+關(guān)注
關(guān)注
30文章
4893瀏覽量
70443 -
回調(diào)函數(shù)
+關(guān)注
關(guān)注
0文章
88瀏覽量
11861 -
單鏈表
+關(guān)注
關(guān)注
0文章
13瀏覽量
6997
發(fā)布評論請先 登錄
C語言-鏈表(單向鏈表、雙向鏈表)
源碼|學(xué)生信息管理系統(tǒng)(C語言單鏈表實現(xiàn))
C語言實現(xiàn)靜態(tài)鏈表的建立

C語言單鏈表的應(yīng)用
C語言算法題:反轉(zhuǎn)一個單向鏈表

C語言玩轉(zhuǎn)鏈表
C語言實現(xiàn)單鏈表舉例

評論