| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 305 人关注过本帖
标题:C询问一个关于结构体的问题 。
只看楼主 加入收藏
方一鸣
Rank: 2
等 级:论坛游民
帖 子:74
专家分:13
注 册:2011-8-31
结帖率:100%
收藏
已结贴  问题点数:10 回复次数:5 
C询问一个关于结构体的问题 。
31.有以下程序:
#include <stdio.h>
union pw
{ int i;
  char ch[2];}a;
main()
{a.ch[0]=13;a.ch[1]=0;printf(″%d\n″,a.i);}
程序的输出结果是(   
 A.13     
 B.14     
 C.208     
 D.209

我理解的是:共用体只能存一个数据的,所以main中每输入一个前一个就给替换了,所以a.i我认为应该是0的 ,但是结果为何是13呢 ! 求帮助
搜索更多相关主题的帖子: include 结构体 
2011-09-04 11:36
Luminal
Rank: 6Rank: 6
等 级:侠之大者
帖 子:140
专家分:470
注 册:2011-8-24
收藏
得分:8 
以下是引用方一鸣在2011-9-4 11:36:09的发言:

31.有以下程序:
#include <stdio.h>
union pw
{ int i;
  char ch[2];}a;
main()
{a.ch[0]=13;a.ch[1]=0;printf(″%d\n″,a.i);}
程序的输出结果是(   
 A.13     
 B.14     
 C.208     
 D.209

我理解的是:共用体只能存一个数据的,所以main中每输入一个前一个就给替换了,所以a.i我认为应该是0的 ,但是结果为何是13呢 ! 求帮助

你说的很对,共用体只能存一个数据的,所以main中每输入一个前一个就给替换了,但是ch[2],其实应该看作是一个数据
(数组);如果 printf("size of union a:%d\n",sizeof(a));输出多少呢?如果char ch[10];又输出多少呢?
前面的结果是 sizeof(int),后面是10;所以在输入a.ch[0]=13;再输入a.ch[1]=0;a.ch[0]并不会变为0,因为他们本来就属于不同的内存空间,
我们假设int型是4个字节,如下图
       a.i              a.ch[]
          b1___13___      ch[0]___13___
          b2___0____      ch[1]___0___
          b3______
          b4______
如果我们输入a.i=0xeee,那么猜想ch[0]=0xee,ch[1]=0xe;
通过编程验证:printf("a.ch[0]=0x%x\ta.ch=[1]0x%x\n",(unsigned char)a.ch[0],a.ch[1]);
结果如上猜想,接着我们再输入a.ch[0]=0x11; 我推测a.i=0xe11,a.[1]=0xe;编程验证:
a.ch[0]=0x11;
printf("a.ch[0]=0x%x\ta.ch=[1]0x%x\n",(unsigned char)a.ch[0],a.ch[1]);
printf("a.i=0x%x\n",a.i);
结果果真如此!
到此我想聪明的你应该知道是怎么回事了吧!
2011-09-04 14:11
pauljames
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
等 级:千里冰封
威 望:9
帖 子:1555
专家分:10000
注 册:2011-5-8
收藏
得分:2 
printf("%p,%p,%p\n",&a.i,&a.ch[0],&a.ch[1]);
printf("%d,%d,%d\n",a.i,a.ch[0],a.ch[1]);

0x804a01c,0x804a01c,0x804a01d
13,13,0

经常不在线不能及时回复短消息,如有c/单片机/运动控制/数据采集等方面的项目难题可加qq1921826084。
2011-09-04 14:21
xhl986213688
Rank: 2
等 级:论坛游民
帖 子:27
专家分:32
注 册:2011-9-2
收藏
得分:0 
有点深奥艾
2011-09-04 14:35
方一鸣
Rank: 2
等 级:论坛游民
帖 子:74
专家分:13
注 册:2011-8-31
收藏
得分:0 
回复 2楼 Luminal
大哥   你说的太深奥 我看了两遍都不懂。 虽说我不否认我很聪明  能不能解释的大众化一点
2011-09-04 15:13
方一鸣
Rank: 2
等 级:论坛游民
帖 子:74
专家分:13
注 册:2011-8-31
收藏
得分:0 
有木有人呀
2011-09-04 16:11
快速回复:C询问一个关于结构体的问题 。
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.023079 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved