boards

本页内容为未名空间相应帖子的节选和存档,一周内的贴子最多显示50字,超过一周显示500字 访问原贴
Programming版 - 谁帮我解释一下这个代码
相关主题
请教一道C语言的题目
帮忙找个错
请教一道c/c++题
C 语言,数字变字符,有点难度
C++ STL map find does not work ???
c++ 中如何把str转换为float?
问个c语言的问题
呼叫THRUST等C语言牛牛,菜鸟级C语言指针问题
template specialization
C 语言,初学者,简单问题(2)
相关话题的讨论汇总
话题: union话题: 100话题: printf话题: include话题: 1101791232
进入Programming版参与讨论
1 (共1页)
c***g
发帖数: 472
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
j****g
发帖数: 597
2
what did you expect?
g*****z
发帖数: 333
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决定),所以字符串显
示为空。
1 (共1页)
进入Programming版参与讨论
相关主题
C 语言,初学者,简单问题(2)
c的问题
little endian vs big endian
关于 big/little endian,为什么对char 有影响?
问一个C语言中类型cast的问题
请教一个C语言的面试题
为啥允许这样的const设计
能帮忙看看这个字符串的操作问题吗?
c++如何把小数转成二进制输出到文本文件?
简单的c code问题
相关话题的讨论汇总
话题: union话题: 100话题: printf话题: include话题: 1101791232