C 结构体怎么求和?
要实现结构体求和功能,大概是想这样实现(下面代码),实现不了,求解!typedef struct{
U8 M_Model;
U8 M_Type;
U8 M_AddNo;
U8 M_Add;
U16 S_PowerNo;
U8 Check;
}sUseData;
sUseData UseData;
void sum(void)
{
U8 i;
structsUseData*p;
UseData.Check = 0;
p = &UseData;
for(i=0;i<sizeof(sUseData)-1;i++){
UseData.Check += *(p+i);
}
}
UseData.Check += *(p+i); 用p++试试 关注一下 这样定义U8 *p ? 完全不明白你说的是什么意思什么功能 p = &UseData;
地址强制转换下
改成
p = (u8 *)&UseData; 本帖最后由 Vampireyifeng 于 2014-5-27 10:46 编辑
sizeof(sUseData)-1是干什么的?如果不考虑结构体对齐,把p强制转换为U8 型指针 jacky_yhy 发表于 2014-5-27 10:27
完全不明白你说的是什么意思什么功能
+1
本帖最后由 cdh 于 2014-5-27 10:51 编辑
p+i?这样能引用结构体的成员吗?貌似不吧。 UseData.Check +=(p++) -> Check; 我认为,结构体是不同数据类型的一个集合,对结构体成员的求和很不方便不如用数组。一定想求和的话可以用结构数组指针,而不是结构变量指针! 本帖最后由 liyang121316 于 2014-5-27 11:40 编辑
你是想计算这个结构体的所有元素的累加和吧,这样试下
void sum(void)
{
U8 i;
u8*p;
UseData.Check = 0;
p = (u8*)&UseData;
for(i=0;i<sizeof(sUseData)-1;i++){
UseData.Check += *(p+i);
}
} 这是在做死的节奏啊, 中间有gap怎么办?!
对了, p是不可以这么加的, 一加地址就加了整个结构体大小, 飞出去了. p需要定义成u8* p=(u8*)&UseData. albert_w 发表于 2014-5-27 11:12
这是在做死的节奏啊, 中间有gap怎么办?!
对了, p是不可以这么加的, 一加地址就加了整个结构体大小, 飞出去 ...
是啊,结构体声明的时候,对齐方式设置成1字节对齐 check 设置为0,参与计算,计算完再填回来。 还好是实现不了,我还以为楼主调试成功了呢。12,13,14楼的回答合起来已经很完整。 本帖最后由 xizi 于 2014-5-27 11:52 编辑
typedef __packed struct
{
U8 M_Model;
U8 M_Type;
U8 M_AddNo;
U8 M_Add;
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;
页:
[1]