教程学院
图像设计 多媒体类 机械制图 办公软件 操作系统 系统编程 网站编程 网页制作 数据库类 网络路由 网络工程 网络安全 考试认证
firefox火狐浏览器下载
酷网学院
CAD
AutoCad Cam350 ProEngineer GCcam MATLAB Unigraphics SolidWorks CAXA Solid3000 Cimatron EdgeCAM
系统
安全 防火墙 病毒 WinXP Win2003 Vista
数据库
编程
网络
精彩图库
  当前位置: 库库中文网 · 系统编程教程 · C语言 · C语言基础教程

C语言程序设计(第7章 结构体与共用体)03

学院最新推荐文章
教程推荐
『C语言程序设计(第7章 结构体与共用体)03』如果文章有大量图片,显示会较慢,请等待图片下载完成
 
点击数: 更新时间:2005-8-15 

7.5 共用体
    7.5.1 共用体的定义
    7.5.2 共用体变量的引用
   

 

7.5 共用体
    所谓共用体类型是指将不同的数据项组织成一个整体,它们在内存中占用同一段存储单元。其定义形式为:
    union 共用体名
    {成员表列};
7.5.1 共用体的定义
union data
{
    int a ;
    float b;
    doublec;
    chard;
}obj;
    该形式定义了一个共用体数据类型union data ,定义了共用体数据类型变量obj。共用体数据类型与结构体在形式上非常相似,但其表示的含义及存储是完全不同的。先让我们看一个小例子。

[例7 - 8 ]
union data /*共用体*/
{
    int a;
    float b;
    double c;
    char d;
}mm;
struct stud /*结构体* /
{
    int a;
    float b;
    double c;
    char d;
};
main( )
{
    struct stud student;
    printf("%d,%d",sizeof(struct stud),sizeof(union data));
}
运行程序输出:
15,8
    程序的输出说明结构体类型所占的内存空间为其各成员所占存储空间之和。而形同结构体的共用体类型实际占用存储空间为其最长的成员所占的存储空间。详细说明如图7 - 6所示。

    对共用体的成员的引用与结构体成员的引用相同。但由于共用体各成员共用同一段内存空间,使用时,根据需要使用其中的某一个成员。从图中特别说明了共用体的特点,方便程序设计人员在同一内存区对不同数据类型的交替使用,增加灵活性,节省内存。

7.5.2 共用体变量的引用
    可以引用共用体变量的成员,其用法与结构体完全相同。若定义共用体类型为:
union data /*共用体*/
{
    int a;
    float b;
    double c;
    char d;
}mm;
其成员引用为:mm.a,mm.b,mm.c,mm.d 但是要注意的是,不能同时引用四个成员,在某一时刻,只能使用其中之一的成员。

[例7-9] 对共用体变量的使用。
main( )
{
    union data
    {
        int a;
        float b;
        double c;
        char d;
    }mm;
    mm.a=6;
    printf("%d\n",mm.a);
    mm.c=67.2;
    printf("%5.1lf\n", mm.c);
    mm.d='W';
    mm.b=34.2;
    printf("%5.1f,%c\n",mm.b,mm.d);
}
运行程序输出为:
6
6 7.2
3 4.2,=
    程序最后一行的输出是我们无法预料的。其原因是连续做mm.d='W';mm.b=34.2;两个连续的赋值语句最终使共用体变量的成员mm.b所占四字节被写入34.2,而写入的字符被覆盖了,输出的字符变成了符号“ =”。事实上,字符的输出是无法得知的,由写入内存的数据决定。
    例子虽然很简单,但却说明了共用体变量的正确用法。

[例7-10] 通过共用体成员显示其在内存的存储情况。
定义一个名为time的结构体,再定义共用体dig:
struct time
{
    int year; /*年*/
    int month;/*月*/
    int day; /*日*/
} ;
union dig
{
    struct time data; /*嵌套的结构体类型* /
    char byte[6];
} ;
    假定共用体的成员在内存的存储是从地址1 0 0 0单元开始存放,整个共用体类型需占存储空间6个字节,即共用体dig的成员data与byte共用这6个字节的存储空间,存储空间分配示意如图7 - 7所示。
由于共用体成员d a t a包含三个整型的结构体成员,各占2个字节。由图7 - 7所示可见,data.year是由2个字节组成,用byte字符数组表示为byte[0]和byte[1]。byte[1]是高字节,byte[0]是低字节。下面用程序实现共用体在内存中的存储。
struct time
{
    int year; /*年*/
    int month; /*月*/
    int day; /*日*/
} ;
union dig
{
    struct time data; /*嵌套的结构体类型*/
    char byte[6];
} ;
main( )
{
    union dig unit;
    int i;
    printf("enter year:\n");
    scanf("%d",&unit.data.year); /*输入年*/
    printf("enter month:\n");
    scanf("%d",&unit.data.mont

[1] [2] 下一页  

作者:无 来源:无
】【关闭窗口
·上页:
·下页:
相关文章
     系统编程教程 - C语言基础教程
普通教程新手必看
普通教程新手必看
普通教程趣味程序导学C语言
普通教程用Win-TC编译与用TC2.0编译地差
普通教程C语言学习初次体会
普通教程C语言漫谈
普通教程Linux下面怎么样进行C语言编制程
普通教程怎么样在一个程序后面运行另一个
普通教程新手问与答(怎么样产生random数
普通教程C语言程序设计(第9章 实用编制程
普通教程C语言程序设计(第9章 实用编制程
普通教程C语言程序设计(第8章 输入输出和
精彩图片汇集
advertisement
关于站点 - 广告服务 - 联系我们 - 版权隐私 - 免责声明 - 合作伙伴 - 程序支持 - 网站地图 - 返回顶部
网站文本地图
版权所有:库库中文 2005-2007 欢迎各种媒体转载我们的原创作品[转载请注明出处]
copyright © 2005-2008 www.QQGB.com online services. all rights reserved. 蜀ICP备05015578
Template designed by Virus. Optimized for 1024x768 to Firefox,Opera and MS-IE6. Site powered by EQL.
红盾
热爱电脑,热爱生活
拥有电脑,拥有生命
让我们享受拥有电脑的时光