打印

【C语言】用结构体和结构体数组构造协议数据内容。

[复制链接]
4015|18
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
keer_zu|  楼主 | 2014-6-27 15:44 | 只看该作者 |只看大图 回帖奖励 |倒序浏览 |阅读模式

下面试需要实现的一条协议。



用结构体实现上述信息的描述和初始化:

//----------------- struct of config file update --------------
struct esl_attr_data{
        unsigned short id;
        unsigned char type;
        unsigned char gs;
};




struct port_data{
        unsigned char esl_num;
        struct esl_attr_data **esl_attr;
};


typedef struct cfg_f_data{
        unsigned char port_num;
        struct port_data **port;
}cfg_f_data_t;




#define __PORT_NUM__ 2
#define __PORT1_ESL_NUM__ 34
#define __PORT2_ESL_NUM__ 56








unsigned char esl_num_arry[__PORT_NUM__] = {65,31};


unsigned char *port1_attr[2] = {port1_esl_id,port1_esl_type};
unsigned char *port2_attr[2] = {port2_esl_id,port2_esl_type};


unsigned char port1_esl_id[__PORT1_ESL_NUM__] = {};
unsigned char port2_esl_id[__PORT2_ESL_NUM__] = {};


unsigned char port1_esl_type[__PORT1_ESL_NUM__] = {};
unsigned char port2_esl_type[__PORT1_ESL_NUM__] = {};






int i,j;


cfg_f_data_t *CfgFData;
struct port_data *PortData;
struct esl_attr_data *EslAttrData;


CfgFData = (cfg_f_data_t *)malloc(sizeof(cfg_f_data_t));


CfgFData->port_num = 2;
CfgFData->port = (struct port_data **)malloc(sizeof(struct port_data *) * CfgFData->port_num);


for(i = 0;i < CfgFData->port_num;i ++){
        PortData = (struct port_data *)malloc(sizeof(struct port_data));
        PortData->esl_num = PortData;
        PortData->esl_attr = (struct esl_attr_data **)malloc(sizeof(struct esl_attr_data *) * PortData->esl_num);
        for(j = 0;j < PortData->esl_num;j ++){
                EslAttrData = (struct esl_attr_data *)malloc(sizeof(struct esl_attr_data));
                EslAttrData->gs = 0x30;
                EslAttrData->id = port1_attr[1][j];
                EslAttrData->type = port1_attr[2][j];
                PortData->esl_attr[j] = EslAttrData;
        }
        CfgFData->port = PortData;
}




//-----------------------------------------------------

相关帖子

沙发
keer_zu|  楼主 | 2014-6-27 15:50 | 只看该作者
本帖最后由 cooldog123pp 于 2024-10-24 14:38 编辑

能熟练使用结构体表述逻辑关系和结构是C语言里一项很重要的技能。结构体指针的熟练使用尤为重要!!

使用特权

评论回复
板凳
keer_zu|  楼主 | 2014-6-28 14:28 | 只看该作者
本帖最后由 cooldog123pp 于 2024-10-24 14:39 编辑
yyy71cj 发表于 2014-6-27 16:24
用指针曾经是一种能力的象征,而单片机的指针又尤为复杂,能把指针用好,确实需要很好的逻辑空间 ...

是啊,其实就指针而言,熟练使用结构体指针是很重要的,是它实现了数据结构,而数据结构描述了逻辑关系。相比其他类型指针,包括函数指针,结构体指针更重要。
上面只是我最近一个项目里面的一条协议,用来下发配置信息,这里使用结构体表示配置信息内容,因为很多元素的数量是不定的,为了能在一个“总的结构体”中存放不定数量的结构体成员,这里采用了指向指针的指针,实际上是个指针数组,里面存放结构体的指针,为什么存放结构体的指针?那是因为数量不是固定的,如果采用结构体做为成员,成员数量不同时,其实“总的结构体”就不是同一个了!

使用特权

评论回复
地板
keer_zu|  楼主 | 2014-6-30 09:35 | 只看该作者
yyy71cj 发表于 2014-6-28 18:00
版主若有兴趣,就把指针专门作为一帖做个详尽的剖析,如何?我会给你穿条裤子的 ...

前辈,我们大家都知道,指针其实就是一个地址,讲的书很多。那本《C与指针》应该颇为经典,我也从中受益无穷。但是用好指针最根本的办法是将它应用起来,不要怕它。曾经有同事说我的程序太不让人放心了,我问为什么?他说:指针用得太多。其实指针只要用好,是不会有任何问题的,有问题那是没有用好,没有领悟他的诀窍。这样吧,我后边抽出时间将一些实际应用实例贴出来,加一些个人见解,发表出来。你看如何?

使用特权

评论回复
5
keer_zu|  楼主 | 2014-6-30 15:32 | 只看该作者
本帖最后由 cooldog123pp 于 2024-10-24 14:39 编辑

顶起,希望更多人参与到我们的讨论!虽然版块刚刚起步,但是我们力求有些内容在里面!
后边就结合实例一起探讨吧!

使用特权

评论回复
6
lzyyoumuren| | 2014-7-29 17:37 | 只看该作者
:victory::lol

使用特权

评论回复
7
keer_zu|  楼主 | 2014-7-30 19:45 | 只看该作者
yyy71cj 发表于 2014-7-30 15:29
楼主可以搞一个大气点的应用,这样才能吸引坛友们的眼球,说不定还有意想不到的收获  ...

最近家事太多。好烦

使用特权

评论回复
8
查理尼奥斯| | 2014-7-31 16:06 | 只看该作者
协议也是一种思想。期待

使用特权

评论回复
9
beinuo| | 2014-8-1 20:50 | 只看该作者
Mark,期待版主的大作~

使用特权

评论回复
10
dictionary| | 2014-8-8 13:44 | 只看该作者
结构体配合位域使用功能才强大!

使用特权

评论回复
11
warfid| | 2014-8-10 12:21 | 只看该作者
这么一看这么感觉我的C就像没学过一样。。。。

使用特权

评论回复
12
ghost_z| | 2014-8-25 11:14 | 只看该作者
学习中!

使用特权

评论回复
13
keer_zu|  楼主 | 2014-8-26 17:36 | 只看该作者
warfid 发表于 2014-8-10 12:21
这么一看这么感觉我的C就像没学过一样。。。。

都是一个过程,都是这么过来的

使用特权

评论回复
14
平常心kxy| | 2014-9-12 11:19 | 只看该作者
学完数据结构,看这个一点都不费劲

使用特权

评论回复
15
578896817fyt| | 2014-9-15 09:16 | 只看该作者
keer_zu 发表于 2014-6-30 09:35
前辈,我们大家都知道,指针其实就是一个地址,讲的书很多。那本《C与指针》应该颇为经典,我也从中受益 ...

求深刻剖析 指针与单片机,最好能结合实例。刚毕业指针还是白痴一个呢

使用特权

评论回复
16
keer_zu|  楼主 | 2014-9-15 10:23 | 只看该作者
578896817fyt 发表于 2014-9-15 09:16
求深刻剖析 指针与单片机,最好能结合实例。刚毕业指针还是白痴一个呢

OK,最近抽时间啊,太忙了。

使用特权

评论回复
17
le062| | 2014-9-15 23:40 | 只看该作者
lz
建议malloc之后,检查下是否为空指针

使用特权

评论回复
18
lzzd0918| | 2014-10-6 16:43 | 只看该作者
收藏一下。回家看

使用特权

评论回复
19
落叶行健ywm| | 2014-10-8 16:26 | 只看该作者
二级指针在实际项目中很少用的,一般都是一级。有时为了项目是不会考虑这些的,只要解决问题,只有偶尔看自己代码才会去好好琢磨架构之类的。

使用特权

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

本版积分规则

个人签名:qq群:49734243 Email:zukeqiang@gmail.com

1349

主题

12426

帖子

53

粉丝