C 结构体怎么求和?

2020-01-23 14:40发布

要实现结构体求和功能,大概是想这样实现(下面代码),实现不了,求解!
typedef struct{       
        U8 M_Model;      
        U8 M_Type;         
        U8 M_AddNo;      
        U8 M_Add[4];     
        U16 S_PowerNo;     
        U8 Check;
}sUseData;

sUseData   UseData;

void sum(void)
{
U8 i;
struct  sUseData  *p;       
        UseData.Check = 0;
        p = &UseData;
        for(i=0;i<sizeof(sUseData)-1;i++){
                UseData.Check += *(p+i);       
        }
}

友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
16条回答
liyang121316
1楼-- · 2020-01-25 01:36
albert_w 发表于 2014-5-27 11:12
这是在做死的节奏啊, 中间有gap怎么办?!

对了, p是不可以这么加的, 一加地址就加了整个结构体大小, 飞出去 ...

是啊,结构体声明的时候,对齐方式设置成1字节对齐
Etual
2楼-- · 2020-01-25 05:12
check 设置为0,参与计算,计算完再填回来。
xizi
3楼-- · 2020-01-25 06:52
还好是实现不了,我还以为楼主调试成功了呢。12,13,14楼的回答合起来已经很完整。
xizi
4楼-- · 2020-01-25 12:06
本帖最后由 xizi 于 2014-5-27 11:52 编辑

typedef __packed struct
{     
        U8 M_Model;      
        U8 M_Type;         
        U8 M_AddNo;      
        U8 M_Add[4];     
        U16 S_PowerNo;     
        U8 Check;
}sUseData;

sUseData   UseData;


void sum(void)
{
U8 i;
U8  *p;        
        UseData.Check = 0;
        p = (U8*)&UseData;
        for(i=0;i<sizeof(sUseData);i++){
                UseData.Check += *(p+i);        
        }
}

关键两点改动是:
1. typedef __packed struct
2. U8  *p;  p = (U8*)&UseData;

一周热门 更多>