上一题下一题
跳转到
 
 
  世界如此多姿,发展如此迅速,窥一斑未必还能知全豹。但正如万花筒一样,每一个管窥都色彩斑斓。  
 
 
  知识通道 | 学习首页 | 教师首页 | PK首页 | 知识创造首页 | 企业首页 | 登录
 
本文对应知识领域
结构和联合和枚举
作者:未知 申领版权
2010年12月12日 共有 1540 次访问 【添加到收藏夹】 【我要附加题目
受欢迎度:

    联合(union):
    一、联合说明和联合变量定义
    联合也是一种新的数据类型, 它是一种特殊形式的变量。
    联合说明和联合变量定义与结构十分相似。其形式为:
    union 联合名
    {
    数据类型 成员名;
    数据类型 成员名;
    ...
    }联合变量名;
    联合表示几个变量公用一个内存位置,在不同的时间保存不同的数据类型和不同长度的变量。
    下例表示说明一个联合a_bc:
    union a_bc
    {
    int i;
    char mm;
    };
    再用已说明的联合可定义联合变量。
    例如用上面说明的联合定义一个名为lgc的联合变量,可写成:
    union a_bc lgc;
    在联合变量lgc中, 整型量i和字符mm公用同一内存位置。
    当一个联合被说明时, 编译程序自动地产生一个变量,其长度为联合中最大的变量长度。
    联合访问其成员的方法与结构相同。同样联合变量也可以定义成数组或指针,但定义为指针时,也要用->符号, 此时联合访问成员可表示成:
    联合名->成员名
    另外, 联合既可以出现在结构内, 它的成员也可以是结构。
    例如:
    struct
    {
    int age;
    char *addr;
    union
    {
    int i;
    char *ch;
    }x;
    }y[10];
    若要访问结构变量y[1]中联合x的成员i, 可以写成:
    y[1].x.i;
    若要访问结构变量y[2]中联合x的字符串指针ch的第一个字符可写成:
    *y[2].x.ch;
    若写成y[2].x.*ch;是错误的。
    
    二、结构和联合的区别
    1. 结构和联合都是由多个不同的数据类型成员组成,但在任何同一时刻,联合中只存放了一个被选中的成员, 而结构的所有成员都存在。
    2. 对于联合的不同成员赋值,将会对其它成员重写,原来成员的值就不存在了,而对于结构的不同成员赋值互不影响的。
    下面举一个例了来加深对联合的理解。
    
    main()
    {
    union
    { /*定义一个联合*/
    int i;
    struct
    { /*在联合中定义一个结构*/
    char first;
    char second;
    }half;
    }number;
    number.i=0x4241; /*联合成员赋值*/
    printf(%c%c\n, number.half.first, mumber.half.second);
    number.half.first='a'; /*联合中结构成员赋值*/
    number.half.second='b';
    printf(%x\n, number.i);
    getch();
    }
    输出结果为:
    AB
    6261
    从上例结果可以看出: 当给i赋值后, 其低八位也就是first和second的值;当给first和second赋字符后,这两个字符的ASCII码也将作为i 的低八位和高八位。
    简单的说,就是联合里面的所有变量共用一个内存区域,区域大小是所有变量中最大的那个。改动某一个变量的值,其他的值也会随之改变。
    
    枚举(enum)
    枚举是一个被命名的整型常数的集合,枚举在日常生活中很常见。
    
    例如表示星期的SUNDAY,MONDAY,TUESDAY,WEDNESDAY,THURSDAY,FRIDAY,SATURDAY,就是一个枚举。
    枚举的说明与结构和联合相似, 其形式为:
    enum 枚举名
    {
    标识符[=整型常数],
    标识符[=整型常数],
    ...
    标识符[=整型常数],
    }枚举变量;
    如果枚举没有初始化,即省掉=整型常数时,则从第一个标识符开始,顺次赋给标识符0,1,2, ...。但当枚举中的某个成员赋值后, 其后的成员按依次加1的规则确定其值。
    例如下列枚举说明后,x1, x2, x3, x4的值分别为0, 1, 2, 3。
    enum string{x1, x2, x3, x4}x;
    当定义改变成:
    enum string
    {
    x1,
    x2=0,
    x3=50,
    x4,
    }x;
    则x1=0, x2=0, x3=50, x4=51
    注意:
    1. 枚举中每个成员(标识符)结束符是,, 不是;, 最后一个成员可省略,。
    2. 初始化时可以赋负数, 以后的标识符仍依次加1。
    3. 枚举变量只能取枚举说明结构中的某个标识符常量。
    例如:
    enum string
    {
    x1=5,
    x2,
    x3,
    x4,
    };
    enum strig x=x3;
    此时, 枚举变量x实际上是7。
    下面看一个例子:
    
    main()
    {
    enum colors {red=1,green,blue}col;
    int cl;
    printf(1=red,2=green,3=blue. seclect: );
    scanf(%d,&cl);
    col=(enum colors) cl; /*强制转换*/
    switch(col)
    {
    case red:
    printf(red\n);
    break;
    case green:
    printf(green\n);
    break;
    case blue:
    printf(blue\n);
    break;
    defalut:
    break;
    }
    }
    
    
    * **类型说明** *
    
    类型说明的格式为:
    typedef 类型 定义名;
    类型说明只定义了一个数据类型的新名字而不是定义一种新的数据类型这里类型是Turbo C许可的任何一种数据类型定义名表示这个类型的新名字。
    例如: 用下面语句定义整型数的新名字:
    typedef int SIGNED_INT;
    使用说明后, SIGNED_INT就成为int的同义词了,此时可以用SIGNED_INT定义整型变量。
    例如: SIGNED_INT i, j;(与int i, j等效)。
    但 long SIGNED_INT i, j; 是非法的。
    typedef同样可用来说明结构、联合以及枚举。
    说明一个结构的格式为:
    typedef struct
    {
    数据类型 成员名;
    数据类型 成员名;
    ...
    } 结构名;
    此时可直接用结构名定义结构变量了。例如:
    typedef struct
    {
    char name[8];
    int class;
    char subclass[6];
    float math, phys, chem, engl, biol;
    }student;
    student Liuqi;
    则Liuqi被定义为结构数组和结构指针。
    
    
    

 

相关新闻

什么是时间?
证券交易所定义、特征、功能
应收账款释义
高中化学基本概念
分析运算符
程序解释
简化段定义伪指令
汇编 程序 分支结构
内存变量和标号的属性
联合类型的定义

您可能对这些感兴趣  

第7讲 综合分析BIM在运用与推广中的障碍问题
考核学生质量的困难
日本福岛核电站事故初步分析
论科技异化与科技人化
中国科技计划项目管理现状与对策
财政科技资金的审计重点和内容
软科学研究机构在政府决策中的功效、困境及对策研究
打造超级DOS系统(下)
DOS命令基础应用(6)
打造超级DOS系统(上)

题目筛选器
日期:
类型:
状态:
得分: <=
分类:
作者:
职业:
关键字:
搜索

 
 
 
  焦点事件
 
  知识体系
 
  职业列表
 
 
  最热文章
 
 
  最多引用文章
 
 
  最新文章
 
 
 
 
网站介绍 | 广告服务 | 招聘信息 | 保护隐私权 | 免责条款 | 法律顾问 | 意见反馈
版权所有 不得转载
沪ICP备 10203777 号 联系电话:021-54428255
  帮助提示    
《我的太学》是一种全新的应用,您在操作中遇到疑问或者问题,请拨打电话13564659895,15921448526。
《我的太学》