关于union的一点小问题!

dngweiok 2011-09-13 09:37:55
#include <stdio.h>

union a
{
unsigned short x;

struct b
{
char y;

char z;
}bb;
}uni;

int main()
{
uni.x=10;

printf("%d\n",uni.x);

putchar(uni.bb.y);

putchar(uni.bb.z);

return 0;
}

最后的结果是:
10

press any key to continue....................

小弟刚学习C 对内存分配了解不够,请师兄为我指点指点。为什么最后有2个空白?
...全文
64 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
Gloveing 2011-09-13
  • 打赏
  • 举报
回复
换行符的ascii码就是10;
因为是union的缘故:如果没有给uni.bb.y和uni.bb.z赋值
你的:(int)uni.bb.y=10;
uni.bb.z=0
lvjing_CSDN 2011-09-13
  • 打赏
  • 举报
回复
公用体的所以变量的其实地址相同,楼主可以在纸上画画该结构体在内存当中的表示,x占两个字节,y和z分别占一个字节,y的其实地址和x的其实地址相同,而inter机器变量存放采用小端法,所以10在低字节存放,也就是第一个字节,高字节为0,也就是z所代表的直接,当按照字符输出时,y是换行,z是一个空字符。所以会有楼主看到的现象。
hxingz 2011-09-13
  • 打赏
  • 举报
回复
10对应的两个字符分别是0的字符(空白,看不到)和10的字符,ASCII码为10的好像是换行符,所以又有空行
动感超哥 2011-09-13
  • 打赏
  • 举报
回复
- &uni.x 0x00427e34 union a uni
10
- &uni.bb.y 0x00427e34 "
"
10 '
'
- &uni.bb.z 0x00427e35 ""
0 ''
我的理解 union 是共用一块地址 仅供产考、、、
Gloveing 2011-09-13
  • 打赏
  • 举报
回复
uni.bb.y='y';
uni.bb.z='z';

putchar(uni.bb.y);
putchar(uni.bb.z);
未初始化或者赋值
Jake443403168 2011-09-13
  • 打赏
  • 举报
回复
[Quote=引用楼主 dngweiok 的回复:]
#include <stdio.h>

union a
{
unsigned short x;

struct b
{
char y;

char z;
}bb;
}uni;

int main()
{
uni.x=10; //换个100试试??10对应的字符显示不了

printf("%d\n",uni.x);

putchar(uni.bb.y);

putchar(uni.bb.z);

……
[/Quote]


换个可以显示字符的ASCII

64,639

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧