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

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

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

評(píng)論