博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
函数指针与链表结合举例
阅读量:4166 次
发布时间:2019-05-26

本文共 2899 字,大约阅读时间需要 9 分钟。

struct   student{int   age ,float  score ,char  sex}

//为结构体赋值

struct     student    stu={20  ,98.9 ,'  w'}

看了上面就容易理解下面的语句:

typedef   int  (*over_time_func)();//函数指针

struct timer_func

{
over_time_func  func;
};

struct timer_func   tf ={func};

//

 struct list
{
NodePtr node;//头指针,指向头结点
    ushort datasize;//链表对应的数据单元所占内存的大小
    ushort length;//链表list的长度
byte otype;//数据类型
};

typedef struct list List;

typedef  List  OverDayFuncList;

OverDayFuncList    DAY_FUNC_LIST ={0};

struct timer_func

{
over_time_func  func;
};

//时间过正时函数指针,正分、整时,整日,整月

typedef   int  (*over_time_func)();//函数指针

add_OverDayFunc(do_day_action);

void add_OverDayFunc(over_time_func func)

{
add_overfunc(TI_DAY,func);
}

void add_overfunc(enum TI_UNIT  tu,over_time_func func)

{
struct timer_func   tf ={func};
switch(tu)
{
case TI_SECOND:
SetNodeDataSize(&SECOND_FUNC_LIST,0,sizeof(struct timer_func));
Add2ArrayList(&SECOND_FUNC_LIST,&tf,NULL);
break;
case TI_MINUTE:
SetNodeDataSize(&MINUTE_FUNC_LIST,0,sizeof(struct timer_func));
Add2ArrayList(&MINUTE_FUNC_LIST,&tf,NULL);
break;
case TI_HOUR:
SetNodeDataSize(&HOUR_FUNC_LIST,0,sizeof(struct timer_func));
Add2ArrayList(&HOUR_FUNC_LIST,&tf,NULL);
break;
case TI_DAY:
SetNodeDataSize(&DAY_FUNC_LIST,0,sizeof(struct timer_func));
Add2ArrayList(&DAY_FUNC_LIST,&tf,NULL);
break;
case TI_MONTH:
SetNodeDataSize(&MONTH_FUNC_LIST,0,sizeof(struct timer_func));
Add2ArrayList(&MONTH_FUNC_LIST,&tf,NULL);
break;
default:break;
}
}

int do_day_action(void*  args)

{
       log_print(INFO,"do_day_action:delete 62 days ago(day freeze,month freeze,curve freeze) data! \n");
//é?3yêy?Y
//删除数据
delete_obsolete_data(0x50040200);
delete_obsolete_data(0x50060200);
delete_obsolete_data(0x50020200);
return 1;
}

static ListPtr  get_func_list(enum TI_UNIT  tu)

{

switch(tu)
{
case TI_SECOND:
return &SECOND_FUNC_LIST;
case TI_MINUTE:
return &MINUTE_FUNC_LIST;
case TI_HOUR:
return &HOUR_FUNC_LIST;
case TI_DAY:
return &DAY_FUNC_LIST;
case TI_MONTH:
return &MONTH_FUNC_LIST;
default:break;
}
return NULL;
}

void exec_over_timer_func(enum TI_UNIT  tu)

{
ListPtr plist =get_func_list(tu);
if(plist ==NULL) return ;
NodePtr node =plist->node;
while(node !=NULL)
{
if(node->data !=NULL)
{
struct timer_func*  ptf =(struct timer_func*)node->data;
ptf->func();
}
node = node->next;
}
}

exec_over_timer_func(TI_DAY);

//assign指定数据data间的赋值方法

 NodePtr Add2ArrayList(ListPtr list, void *data, void (*assign)(void* dest, const void* src))
 {
if(list==NULL) return NULL;
NodePtr  node = (NodePtr)malloc(sizeof(struct node));
if(node ==NULL) return NULL;
node->data =malloc(list->datasize);
if(node->data ==NULL) return NULL;
node->next =NULL;
//设置结点的值
if(assign == NULL)//使用默认的逐位复制方式,即浅复制
memcpy(node->data,data,list->datasize);
else    //使用用户定义的复制方式来复制数据
assign(node->data, data);
if(list->node ==NULL)
list->node =node;
else
{
NodePtr temp =list->node;
while(temp->next !=NULL)temp=temp->next;
temp ->next=node;
}
//把node的值连入list后,list的长度加1
++list->length;
return node;
 }

转载地址:http://srhxi.baihongyu.com/

你可能感兴趣的文章
商务智能-基本方法-数据钻取
查看>>
C++程序员技术需求规划(发展方向)
查看>>
TinyXml2解析xml用法例子
查看>>
Linux 虚拟内存和物理内存
查看>>
产品和技术,你选对了吗?
查看>>
哈希表(Hash Table)-哈希概述
查看>>
Filebench的安装及使用
查看>>
Ubuntu下 E: Could not get lock /var/lib/apt/lists/lock - open (11: Recource temporarily unavailable)
查看>>
Linux-mmap映射物理内存到用户空间
查看>>
Ext4文件系统三种日志模式——journal、ordered、writeback
查看>>
Linux挂载ext4根文件系统为journal模式
查看>>
linux内核引导参数解析及添加
查看>>
长短期记忆人工神经网络(LSTM)及其tensorflow代码应用
查看>>
长短期记忆人工神经网络(LSTM)网络学习资料
查看>>
运行网络中搜寻到的python程序代码——以长短期记忆人工神经网络(lstm)python代码为例
查看>>
闪存文件系统(Flash File System)
查看>>
WinMIPS64工具进行MIPS指令集实验(一)
查看>>
WinMIPS64工具进行MIPS指令集实验(二)
查看>>
Linux上快速入门英特尔Optane DC Persistent Memory Module的配置与使用
查看>>
Intel Optane DC Persistent Memory Module (PMM)详解
查看>>