Redian新闻
>
谁帮我解释一下这个代码
avatar
谁帮我解释一下这个代码# Programming - 葵花宝典
c*g
1
#include
#include
main(){
typedef union {
int a;
char b[10];
float c;
}
Union;
Union x,y ={100};
x.a = 50;
strcpy(x.b,"hello");
x.c = 21.50;
printf("Union x: %d %s %f \n",x.a,x.b,x.c);
printf("Union y: %d %s %f \n",y.a,y.b,y.c);
}
为什么我的输出是
Union x: 1101791232 21.500000
Union y: 100 d 0.000000
avatar
j*g
2
what did you expect?
avatar
g*z
3
union所有的变量都存在一个地址
y={100}就是int x = 100,char b[0] = 100, float c 的 LSB = 100
所以打印出来x = 100,b = "d\0", c = 1.0 * 2^(100-127) = 0.
000000007450580596923828125。如果你打印精度够的话就可以看到真正的c
同理x的最后赋值才是真正的值,x.c = 21.50,实际的存储是LSB-MSB:0x83,0x58,
0x00,0x00,由于存储的时候MSB在前(由你系统的Endianness决定),所以字符串显
示为空。
相关阅读
logo
联系我们隐私协议©2024 redian.news
Redian新闻
Redian.news刊载任何文章,不代表同意其说法或描述,仅为提供更多信息,也不构成任何建议。文章信息的合法性及真实性由其作者负责,与Redian.news及其运营公司无关。欢迎投稿,如发现稿件侵权,或作者不愿在本网发表文章,请版权拥有者通知本网处理。