C语言 共用体union的问题

2025-02-23 21:59:57
推荐回答(3个)
回答1:

首先理解共同体是同一个内存段可以用来存放集中不同类型的成员,但在每一瞬间只能存放其中一个成员,而不是同时存放一个值。你的程序是将123456789L长整型放进去复制给c.a,因此按整数存储在变量单元中,如果按照“%d”输出c.a则会输出123456789,如果按照“%f”格式输出c.b,系统会将存储单元中的信息按浮点数形式来处理,其数值部分则为0,所以输出为0.000000

回答2:

输出的是垃圾值,原因是局部变量共用体成员b,没有初值,故其初始化的值为一个垃圾值,之后的c.a = 123456789L;语句只改变了其低四字节的数据(当然这里假设sizeof(long)==4),其高四字节的值无法确定,故其输出是不可确定的

即便c.b有了初值,这里还牵涉到字节序的问题,是大端存储,还是小端存储的的问题
还有ieee754的问题,这些都不是一句话两句话可以说清的问题,lz想搞清的话,自行google上述词条

回答3:

你前面的c.b没有赋值,b又是double类型默认值是0.000000所以输出结果就是0.000000,后面你把b强转为int类型所以i的值输出为0,