联合体的赋值问题

yass8899 2013-01-11 04:27:29
不知能否将整个联合体union赋值?union中各变量共享一段内存,即每次只会用其中一个变量,那么要赋值时可以直接整体赋值,还是判断后给其中一个有值的变量赋值?
struct A
{
union
{
struct B
{}b;
struct C
{}c;
struct D
{}d;
}e;

struct F
{}f;
....
}a;
A b;
现需将a中联合体中的内容赋值给b, 可以用b.e = a.e; 吗?
...全文
837 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhaokai115 2013-01-16
  • 打赏
  • 举报
回复
前面举的是不可以的例子,反过来

u1.i = u2.i;
可以看作是把u2完全赋值给u1了
yass8899 2013-01-12
  • 打赏
  • 举报
回复
引用 5 楼 zhaokai115 的回复:
如果联合内各成员的大小都相同,可以随便选一个,但实际情况往往不是这样的。 比如 C/C++ code?12345678910union U{ int i; char c;} u1, u2; u1.i = 0x12345678;u2.i = 0x87654321; u1.c = u2.c; 这时你发现u1.i只有一个字节被改掉了
这个我明白,因为char型只占一个字节。
yass8899 2013-01-11
  • 打赏
  • 举报
回复
引用 1 楼 turingo 的回复:
要用memcpy函数直接拷贝数据。
请问:是这样吗:memcpy(&b.e,&a.e,sizeof(a.e)); ? 如果我想拷贝整个结构体变量内所有值呢? 可以用memcpy(&b,&a,sizeof(a)); 为什么不能直接赋值?b = a; b.e = a.e ? 能解释下吗? 谢谢!
紫云的博客 2013-01-11
  • 打赏
  • 举报
回复
看看c标准库
图灵狗 2013-01-11
  • 打赏
  • 举报
回复
要用memcpy函数直接拷贝数据。
zhaokai115 2013-01-11
  • 打赏
  • 举报
回复
如果联合内各成员的大小都相同,可以随便选一个,但实际情况往往不是这样的。 比如

union U
{
    int i;
    char c;
} u1, u2;

u1.i = 0x12345678;
u2.i = 0x87654321;

u1.c = u2.c;
这时你发现u1.i只有一个字节被改掉了
赵4老师 2013-01-11
  • 打赏
  • 举报
回复
不要迷信书、考题、老师、回帖; 要迷信CPU、编译器、调试器、运行结果。 并请结合“盲人摸太阳”和“驾船出海时一定只带一个指南针。”加以理解。 任何理论、权威、传说、真理、标准、解释、想象、知识……都比不上摆在眼前的事实!

69,368

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧