问个C语言中嵌套结构体和联合体的问题,谢谢指点.

时间:2022-09-05 18:03:47
typedef struct A{
#ifdef VALUE   
Temp temp;
#endif
   union 
   {
      
      struct 
      {
       int tempNum;
       int tempGroup;
      }C;          
      struct
      {
       char tempClass;
       char tempFlie[10];
      }D;
     
   }B;
   
}A; 
在上面的嵌套联合结构体中,如果分别想引用C结构体变量和D结构体变量中的成员,该如何引用>

可以写成如下形式吗?

--->>A.B.C.tempNum;
--->>A.B.D.tempFile;
这样可以吗>

如果要对其成员进行赋值,可以写成如下形式吗>

--->>A.B.C.tempNum = 0;
--->>A.B.D.tempFile = {0};
这样可以吗>

敬请高人指点,谢谢

14 个解决方案

#1


就是这样,不过suruct C and B can not be used same time.

#2


--->>A.B.C.tempNum;
--->>A.B.D.tempFile;
这样可以吗>
===================
可以啊。

#3


没有问题啊,难道楼主不会写个程序自己测试一下?

#4


E...最前面有个关键字typedef!那样应该就不可以了。

#5


如果A是一个结构体变量的话,那么可以写那样的形式,也可以那样赋值。

#6


jiajun2001(嘉俊) ,你和偶一样刚刚没注意到关键字typedef!哇哈哈 ^_^

#7


好像不可以哦
A在这里已经是一个类型名称了,除非你里边的定义是静态的.
否则必须
 A对象.B.C.tempGroup

#8


呵呵,不好意思,尝试了一下,好像属性即使是静态的也不行....
道歉.
哪就只能是A对象的方式了,关注

#9


除了tempFlie外,其他的都可以
不能对数组名进行赋值操作

#10


typedef struct A{ 
lz笔误?是不是应该这样的??
typedef struct {
。。。
}A;

如果是typedef struct {...}A;,则

 YeTimmy(#我顶你个肺#) ( ) 信誉:100  2006-08-07 14:09:00  得分: 0  
   除了tempFlie外,其他的都可以
不能对数组名进行赋值操作
  
 

#11


非常感谢各位高人的指点.

烦请再问一下,
那就是说只能在A结构体中引用一个成员,用成员的方式引用了,是吗?

就比如 

A tempA;
tempA.B.C.tempGroup;
tempA.B.D.tempFile;
这样可以吗>

那赋值就是

tempA.B.C.tempGroup = 0;
tempA.B.D.tempFile = {0};
这样可以吗>

谢谢各位高人指教.

#12


不好意思,没注意写错了.谢谢tailzhou(尾巴) ( ) 的指出.那引用那些写可可以吗

#13


YeTimmy(#我顶你个肺#) ( ) 信誉:100  2006-08-07 14:09:00  得分: 0  
   除了tempFlie外,其他的都可以
不能对数组名进行赋值操作


A.B.C.tempNum = 0;    //可以
A.B.D.tempFile = {0}; //不可以

#14


A.B.D.tempFile 引用方式是对的,但赋值的方式不对

memset(A.B.D.tempFile , 0, sizeof(A.B.D.tempFile ));

#1


就是这样,不过suruct C and B can not be used same time.

#2


--->>A.B.C.tempNum;
--->>A.B.D.tempFile;
这样可以吗>
===================
可以啊。

#3


没有问题啊,难道楼主不会写个程序自己测试一下?

#4


E...最前面有个关键字typedef!那样应该就不可以了。

#5


如果A是一个结构体变量的话,那么可以写那样的形式,也可以那样赋值。

#6


jiajun2001(嘉俊) ,你和偶一样刚刚没注意到关键字typedef!哇哈哈 ^_^

#7


好像不可以哦
A在这里已经是一个类型名称了,除非你里边的定义是静态的.
否则必须
 A对象.B.C.tempGroup

#8


呵呵,不好意思,尝试了一下,好像属性即使是静态的也不行....
道歉.
哪就只能是A对象的方式了,关注

#9


除了tempFlie外,其他的都可以
不能对数组名进行赋值操作

#10


typedef struct A{ 
lz笔误?是不是应该这样的??
typedef struct {
。。。
}A;

如果是typedef struct {...}A;,则

 YeTimmy(#我顶你个肺#) ( ) 信誉:100  2006-08-07 14:09:00  得分: 0  
   除了tempFlie外,其他的都可以
不能对数组名进行赋值操作
  
 

#11


非常感谢各位高人的指点.

烦请再问一下,
那就是说只能在A结构体中引用一个成员,用成员的方式引用了,是吗?

就比如 

A tempA;
tempA.B.C.tempGroup;
tempA.B.D.tempFile;
这样可以吗>

那赋值就是

tempA.B.C.tempGroup = 0;
tempA.B.D.tempFile = {0};
这样可以吗>

谢谢各位高人指教.

#12


不好意思,没注意写错了.谢谢tailzhou(尾巴) ( ) 的指出.那引用那些写可可以吗

#13


YeTimmy(#我顶你个肺#) ( ) 信誉:100  2006-08-07 14:09:00  得分: 0  
   除了tempFlie外,其他的都可以
不能对数组名进行赋值操作


A.B.C.tempNum = 0;    //可以
A.B.D.tempFile = {0}; //不可以

#14


A.B.D.tempFile 引用方式是对的,但赋值的方式不对

memset(A.B.D.tempFile , 0, sizeof(A.B.D.tempFile ));