你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

请教一个C语言结构体的赋值问题。

[复制链接]
vention123456 提问时间:2017-10-18 20:57 /
悬赏10ST金币已解决
本帖最后由 vention123456 于 2017-10-18 20:59 编辑

请问,我有结构体 两个结构体,如何将快速的赋值过去。

typedef struct
{
        unsigned char    A1[150];        
        unsigned char    A2[100];        
        unsigned long int   A3[200];
        unsigned short int   A4[100];
        unsigned long int   A5[300];
}ST_ONE;



typedef struct
{
        unsigned char    A1[150];        
        unsigned char    A2[100];        
        unsigned long int   A3[200];
        unsigned long int   A3_0[100];    //  增加一个成员A3_0
        unsigned short int   A4[100];
        unsigned long int   A5[300];
}ST_TWO;


ST_ONE    stOne;
ST_TWO   stTwo;
请问,有什么办法,使得stOne,和stTwo 两个结构体,相同的成员名赋值为一样的,而结构体stTwo多出来的 一个成员A3_0,我可以再另行赋值。
是否可以用共同体?这样使得stOne结构体 在一赋值的时候, stTwo结构体内相同成员名的成员就已经赋值了?如果用共同体的话,要如何实现?;还是说有其他好的方法。麻烦各位大神指点指点小弟。

最佳答案

查看完整内容

union 其实就是占用同一块内存,在共用体里边定义一个与结构体等长的char数组,数组里边每个字节对应结构体从上到下的字节。按照结构体里边每个元素的字节数从stOne赋值值stTwo。
收藏 评论14 发布时间:2017-10-18 20:57

举报

14个回答
张亚飞 回答时间:2017-10-18 20:57:35
vention123456 发表于 2017-10-19 18:25
问题就是不能把多出的放最下面;多出的是中间插入的。

union 其实就是占用同一块内存,在共用体里边定义一个与结构体等长的char数组,数组里边每个字节对应结构体从上到下的字节。按照结构体里边每个元素的字节数从stOne赋值值stTwo。
wenyangzeng 回答时间:2017-10-18 21:31:02
for(i=0;i<150;i++){
stOne.A1[i]= stTwo.A1[i]=0x00;
}
............
uzslm 回答时间:2017-10-18 22:43:40

C 语言可不支持这样的连续操作
uzslm 回答时间:2017-10-18 22:46:41
union 是个很好的办法,但你多出来那个成员最好在底部;
而且这涉及到成员对齐问题,可以看看用 pack预编译指令能否解决。
uzslm 回答时间:2017-10-18 23:02:34
示例:
union
{
typedef struct
{
        unsigned char    A1[150];        
        unsigned char    A2[100];        
        unsigned long int   A3[200];
        unsigned short int   A4[100];
        unsigned long int   A5[300];
}ST_ONE;
typedef struct
{
        unsigned char    A1[150];        
        unsigned char    A2[100];        
        unsigned long int   A3[200];
        unsigned long int   A3_0[100];    //  增加一个成员A3_0
        unsigned short int   A4[100];
        unsigned long int   A5[300];
}ST_TWO;
}
但应该把TWO的那个多出来的放在底部,这样你对TWO进行初始化后,ONE就跟着一样了;记住他们在内存里是共享一个存贮单元的,你修改了其中任何一个,另外一个也跟着一样修改了。

评分

参与人数 1ST金币 +2 收起 理由
zero99 + 2

查看全部评分

harvardx 回答时间:2017-10-19 05:53:44
可以自己在mdk里面写代码测试 ,在线调试 ,就知道结果

评分

参与人数 1ST金币 +2 收起 理由
zero99 + 2

查看全部评分

zhoupxa 回答时间:2017-10-19 09:11:01
同意uzslm
zhao.zhao 回答时间:2017-10-19 12:39:00
用联合体union, 不过长度要设为等长,位置要相对应起来,这样给一个变量赋了值,另一个也得到了相同的值

评分

参与人数 1ST金币 +2 收起 理由
zero99 + 2

查看全部评分

uzslm 回答时间:2017-10-19 13:52:44
就这个case来说,不一定非要等长;基本原则来说就是按照顺序,变量类型要一致
12下一页

所属标签

相似问题

关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
STM32N6 AI生态系统
STM32MCU,MPU高性能GUI
ST ACEPACK电源模块
意法半导体生物传感器
STM32Cube扩展软件包
关注我们
微信公众号二维码 微信公众号
手机版二维码 手机版