永发信息网

C语言中 union的问题,int i赋初值,输出k【0】为int的值,但是输出float j和 k【1】怎么就不是int的值了

答案:2  悬赏:80  手机版
解决时间 2021-03-07 16:39
  • 提问者网友:niaiwoma
  • 2021-03-06 16:55
#include
union test
{ int i;
float j;
char k[5];
};
int main()
{
union test t;
t.i=10;
printf("%d",t.k[0]);
return 0;
}
输出k[0]是正确的,但是输出k[1],j.都不是10,而是0?
最佳答案
  • 五星知识达人网友:轻雾山林
  • 2021-03-06 18:15
test的三个成员i,j,k共用空间,但要注意,数组k中的元素是各自独立的

只有成员i和k[0]能得到10
三个成员共用内存空间,因此存储的内容都是十进制数10(化为二进制保存)
由于十进制10不超过8位二进制,因此对应char类型数组a的第一个元素是正确的,是换行符(内码为10),使用%d将输出10
但数组a的后面几个元素都相当于是没有初始化(数组元素没有全部初始化的情况下,未初始化元素都是0或空),因此是默认值0(字符为'\0')
而10的二进制如果作float类型读取,则是相当于0乘以2的10次方,结果也是0。注意float的二进制长度和int相同,float类型前面是基数后面是指数,因此10被当作指数处理(不过如果用%d来输出成员j,仍可得到10)
全部回答
  • 1楼网友:野慌
  • 2021-03-06 19:18
union是每个元素占用共同空间 union test { int i; float j; char k[5]; }; 这里,是i j k三个占共同的空间。
我要举报
如以上回答内容为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
点此我要举报以上问答信息
大家都在看
推荐资讯