C 程序设计中,如何对struct中的union数据进行初始化

来源:百度知道 编辑:UC知道 时间:2024/06/24 07:29:58
struct LEDSTRUCT
{
uchar cl;
union
{
uchar ch[4];
uchar *p;
uint ida[2];
}un;
};
如何做才能针对性的对结构体中的union下的uchar *p赋值,或uchar ch[4]赋值.这方面内容哪些书中有说明?
例如对union中的ida进行赋值{1035,533},而结果是不对的,我写的结构中cl就是解析用union 中的哪一个可用的标志,所以xniren说的,并不是我所提问的内容!

在结构中增加一个成员,用来表示联合成员中哪个成员有效。比如:上述结构LEDSTRUCT中增加一个成员uchar ctype;当ctype=0时,un.ch有效;当ctype=1时,un.p有效,当ctype=2时,un.ida有效。只有当联合中某个成员有效时才能对该成员赋值或取值。

问题补充答复:对union初始化可以有两个途径:
1.在声明union变量的同时进行初始化。此时,初始化成员时必须针对第一个成员变量来初始化。
比如:
uchar p1[32] = "LEDSTRUCT";
uint p2[2] = {100, 200};
struct LEDSTRUCT led[3] = {
{0, {0, 10, 20, 30}},
{1, {((unsigned long)p1 & 0xff), (((unsigned long)p1 >> 8) & 0xff), (((unsigned long)p1 >> 16) & 0xff), (((unsigned long)p1 >> 24) & 0xff)}},
{2, {{((unsigned long)p2 & 0xff), (((unsigned long)p2 >> 8) & 0xff), (((unsigned long)p2 >> 16) & 0xff), (((unsigned long)p2 >> 24) & 0xff)}}
};
注意:由于union的成员变量ida的类型是uint,并且占用2维共8字节空间,所以,仅仅通过union的第一个成员变量来初始化ida,不能初始化ida[1]。
2.在声明union变量之后,再对该变量进行初始化。
比如:
struct LEDSTRUCT led[3];
led[0].cl = 0;
led[0].un.ch[0] = 0;
led[0].un.ch[1] = 10;
led[0].un.ch[2] = 20;
led[0].un.ch[3] =