| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 446 人关注过本帖
标题:共用体问题
只看楼主 加入收藏
zmrfff
Rank: 1
等 级:新手上路
帖 子:64
专家分:0
注 册:2008-10-21
结帖率:95.83%
收藏
已结贴  问题点数:20 回复次数:5 
共用体问题
程序如下:
#include <stdio.h>
void main()
{
    union {
            int n;
            char c;
    }u1;
     u1.c=65;
    printf("%d\n",u1.n);
}
共用体内的变量同占一段内存,所以我认为u1.n的值应与u1.c相等,也为65,但经编译、连接、运行后,值为
-858993599,很奇怪啊,请问为什么?谢谢大侠们^^
2009-09-06 23:52
jammyzm
Rank: 3Rank: 3
等 级:论坛游侠
帖 子:90
专家分:126
注 册:2008-12-1
收藏
得分:7 
你研究下这个小程序
#include <stdio.h>
int main()
{
char *pt=NULL;
    union {
            unsigned int n;
            unsigned char c;
    }u1;
    u1.c=65;
    pt=(char *)&(u1.n);
    printf("u1.c=%x\n",u1.c);
    for(int i=0;i<4;i++)
        printf("%x\n",*(pt++));
    printf("u1.n<<24=%x\n",u1.n<<24);
return 0;
}
2009-09-07 10:02
UserYuH
Rank: 12Rank: 12Rank: 12
来 自:毅华
等 级:火箭侠
威 望:8
帖 子:720
专家分:3300
注 册:2009-8-10
收藏
得分:7 
如共用体定义为:
 union  
   {  
      int n;    /* 整型二字节 */
      char c;    /* 字符型一字节 */  
    }u1;      /* 共用体变量二字节(按共用体里最字节最高的) */
再看下面代码:

#include <stdio.h>  
void main()  
{  
    union   
    {  
        int n;  
        char c;  
    }u1;  
  
    printf("u1.n=%d u1.c=%d\n",u1.n,u1.c); /* 这里先输出u1.n和u1.c值,由于u1.n和u1.c没赋初值,所以输出值不定 */
  

    u1.c=65;                               /* 对u1.c赋值为65,u1.c是一字节,也就是只对共用体一个字节赋值,另一个字节还是原样 */   
    printf("u1.n=%d u1.c=%d\n",u1.n,u1.c);  /* u1.n为两字节,有一个字节还没赋初值,所以这里输出的u1.n值不对,输出u1.c是65 */
  
    u1.n=0;                               /* 再看这里,现在初值u1.n为0 */
    u1.c=65;                                 /* u1.c赋值65 */
    printf("u1.n=%d u1.c=%d\n\n\n",u1.n,u1.c);  /* 这样输出u1.n和u1.c都是65 */  
    getch();  
}
 
最后说下,使用共用体一般都不采用这种方法。假如以上的整型u1.n换成双精度,u1.n的输出就不对了。
建义:在对共用体成员操作或输出时,先看这共用体成员是否赋初值再进行操作或输出。

努力—前进—变老—退休—入土
2009-09-07 14:27
zmrfff
Rank: 1
等 级:新手上路
帖 子:64
专家分:0
注 册:2008-10-21
收藏
得分:0 
很感谢二位的回答!尤其是UserYuH大人的回答,让我彻底明白了,谢谢!!!!
2009-09-10 23:05
xuyangmin
Rank: 1
等 级:新手上路
帖 子:10
专家分:7
注 册:2009-8-18
收藏
得分:0 
占个位置,以后好查
2009-09-11 15:36
流浪天边
Rank: 2
等 级:论坛游民
帖 子:100
专家分:53
注 册:2010-7-12
收藏
得分:0 
上面楼主说的很对,我也学习啊
2010-10-19 22:00
快速回复:共用体问题
数据加载中...
 
   



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

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