关于一个C语言共用体赋值问题

2025-01-31 12:17:44
推荐回答(4个)
回答1:

教科书说的理论上是没有错的,因为联合体中各变量是共用内存的,一个联合变量的长度等于各成员中最长的长度,联合变量可被赋予任一成员值,但每次只能赋一种值, 赋入新值则冲去旧值。
http://hi.baidu.com/hsyl/blog/item/3a9af91900a43376dbb4bdf0.html/cmtid/94dc8b82ebba7a9ff703a6f2
出现你这种情况的原因可能是:int占4位,float占4位,char占1位,当赋值float后int的就完全更改了,当赋值char的时候,其实float的值也是更改了的,但是char因为占的位少,可能只改变了float的低位空间,也就是小数点后很多位的值,这样输出来的时候因为float就显示小数点后的几位,很后面的就被约为0了,所以结果没有变

回答2:

首先:在我们常用的系统中,存放的变量经常是从右向左存放的.
比如你定义了c1和c2
那么在计算机内存是这样的顺序:
c2,c1
你的共用体好像有个问题,我没发现X的定义
不过我假设你的X是个int,那么x与C2,C1共用同一块内存,这就是共用体的意思
当你给x赋值,也是给C2,c1赋值,
并且0x12放到了C2的位置,34放到了C1位置
所以,就产生了你所说的结果

回答3:

这一点教科书说的是对的

只有成员c值是可确定的,其余成员的值在不同的编译器,不同的编译选项下结果可能不同

主要是字节序的问题,也就是使用大端模式还是小端模式的问题

回答4:

{

char
a
=
'a';

char
a
=
'b'
;//落了一个分号

return
0;
}
首先
,你第三行落了一个分号;
其次
,c语言多次赋值是允许的,但重复定义是不允许的。
char
a='a';//定义了a,且赋了初值‘a’
char
a='b';//重复定义了a
最后
,你想多次赋值时不需要加上类型修饰符,那样是定义变量。
例如定义a,并赋初值'a',第二次赋值'b',覆盖其初值
char
a='a';//定义了a,且赋了初值‘a’;
a='b';//再次给a赋值'b',覆盖了它的初值'a';