一个关于共用体||联合体的问题代码如下:#include "stdio.h"int _tmain(int argc,_T

一个关于共用体||联合体的问题
代码如下:
#include "stdio.h"
int _tmain(int argc,_TCHAR* argv[])
{
union union_t{int i ; double d;}u1,u2;
u1.i = 88 ;
u2.d = 3.14;
printf("u1 = %dnu2.d = %fn",u1 ,u2.d); //这两个输出语句一个 u1
printf("u1.i = %dnu2.d = %fn",u1.i,u2.d); //一个 u1.2
getchar();
}
输出结果:
u1.i = 88 //都是输出u2.d的,结果不一样呀
u2.d = 4276982394258811300000000000000000.//注意下我的疑问是这个输出结果
u1.i = 88
u1.d = 3.140000
感觉输出应该一样呢,第一个输的结果.
之前想明白了,现在记不清了,
- -
听雨007 1年前 已收到1个回答 举报

行云无据 幼苗

共回答了22个问题采纳率:100% 举报

printf("u1.i = %dnu2.d = %fn",u1.i,u2.d); //应该改为u1.i
printf("u1.i = %dnu2.d = %fn",u1.i,u2.d);

1年前 追问

10

听雨007 举报

第一个printf函数第一个输出时正常的呀“u1.i = 88”,后面输出u2.d就出问题了“u2.d = 4276982394258811300000000000000000” 但是第二个printf函数输出的u2.d就没问题。u1.d = 3.140000 。 两次只是前面的一次输出不一样罢了。 这是问题的关键呀,内存什么的我理解,共用体可能不知道怎么用吗? 我碰巧发现的东西,想知道为什么是这种输出结果 - -

举报 行云无据

因为你第一次传进去的是u1而不少u1.i,因此其类型是union类型,长度是最大元素double类型长度为8,而格式控制符%d要求的4字节,也就是说你传进去的变量长度和预期的长度完全不匹配 看看http://blog.csdn.net/arong1234/article/details/2456455

听雨007 举报

大致明白了,以后有时间仔细研究下,谢谢你的耐心回答!
可能相似的问题
Copyright © 2024 YULUCN.COM - 雨露学习互助 - 17 q. 0.011 s. - webmaster@yulucn.com