精华内容
下载资源
问答
  • 共用体类型数据特点 转载于:https://www.cnblogs.com/LoveFishC/archive/2012/07/24/3846541.html
    共用体类型数据的特点

    转载于:https://www.cnblogs.com/LoveFishC/archive/2012/07/24/3846541.html

    展开全文
  • C++共用体类型数据特点

    千次阅读 2013-04-10 11:05:41
    使用共用体变量的目的是希望用同一个内存段存放几种不同类型数据。但请注意: 在每一瞬时只能存放其中一种,而不是同时存放几种。能够访问的是共用体变量中最后一次被赋值的成员,在对一个新的成员赋值后原有的...
    1. 使用共用体变量的目的是希望用同一个内存段存放几种不同类型的数据。但请注意: 在每一瞬时只能存放其中一种,而不是同时存放几种。
    2. 能够访问的是共用体变量中最后一次被赋值的成员,在对一个新的成员赋值后原有的成员就失去作用。
    3. 共用体变量的地址和它的各成员的地址都是同一地址。
    4. 不能对共用体变量名赋值;不能企图引用变量名来得到一个值;不能在定义共用体变量时对它初始化;不能用共用体变量名作为函数参数。

    例7.7 设有若干个人员的数据,其中有学生和教师。学生的数据中包括: 姓名、号码、性别、职业、年级。教师的数据包括: 姓名、号码、性别、职业、职务。可以看出,学生和教师所包含的数据是不同的。

    现要求把它们放在同一表格中,如果job项为s(学生),则第5项为grade(年级)。即Li是3年级的。如果job项是t(教师),则第5项为position(职务)。Wang是prof(教授)。显然对第5项可以用共用体来处理(将class和position放在同一段内存中)。要求输入人员的数据,然后再输出。为简化起见,只设两个人(一个学生、一个教师)。
    程序如下:
    #include <iostream>
    #include <string>
    #include <iomanip>//因为在输出流中使用了控制符setw
    using namespace std;
    struct
    {
       int num;
       char name[10];
       char sex;
       char job;
       union P//声明共用体类型
       {
          int grade;//年级
          char position[10];//职务
       }category;//成员category 为共用体变量
    }person[2];//定义共用体数组person,含两个元素
    int main( )
    {
       int i;
       for(i=0;i<2;i++)//输入两个学生的数据
       {
          cin>>person[i].num>>person[i].name
          >>person[i].sex>>person[i].job;
          if(person[i].job==′s′)
             cin>>person[i].category.grade;//若是学生则输入年级
          else
             if (person[i].job==′t′)
                cin>>person[i].category.position;//若是教师则输入职务
       }
       cout<<endl<<″No. Name sex job grade/position″<<endl;

       for(i=0;i<2;i++)
       {
          if (person[i].job==′s′) cout<<person[i].num<<setw(6)
          <<person[i].name<<″ ″<<person[i].sex <<″ ″
          <<person[i].job<<setw(10)<<person[i].category.grade<<endl;
          else cout<<person[i].num<<setw(6)<<person[i].name
          <<″ ″<<person[i].sex <<″ ″<<person[i].job
          <<setw(10)<<person[i].category.position<<endl;
       }
       return 0;
    }
    运行情况如下:
    101 Li fs 3↙ (注意在输入的字母f和s之间无空格)
    102 Wang mt prof↙ (注意在输入的字母m和t之间无空格)
    No. Name sex job grade/position 101 Li f s 3 102 Wang m t prof
    为了使输出结果上下对齐,在cout语句中用了setw控制符和插入空格。往往需要试验多次。
    展开全文
  • 文章目录自定义数据类型——共用体类型、枚举...共用体类型名与union一起作为类型名称,成员列表是该类型数据 元素的集合。一对大括号{}是成员列表边界符,后面必须用分号 (;)结束。 union A { int m,n; //整型

    自定义数据类型——共用体类型、枚举类型

    1 共用体类型

    共用体(union)是一种成员共享存储空间的结构体类型。共用体类型是抽象的数据类型,因此程序中需要事先声明具体的共用体类型,一般形式为:

    union 共用体类型名 { 
    	成员列表 
    };

    共用体类型名与union一起作为类型名称,成员列表是该类型数据 元素的集合。一对大括号{}是成员列表边界符,后面必须用分号 ()结束。

    union A {    
    int m,n; //整型成员    
    char a,b; //字符成员 
    };

    共用体中每个成员与其他成员之间共享内存。 系统会计算共用体中最大的成员占用的空间并以之为共用体分配存储空间。

    对于union A,m、n、a、b共享内存单元,其内存结构如图所示。
    在这里插入图片描述

    结构体与共用体的内存形式是截然不同的。共用体内存长度是所有 成员内存长度的最大值,结构体内存长度是所有成员内存长度之和。 可以用sizeof取它们的内存长度进行比较。

    与结构体对象相似,定义共用体对象也有三种形式:

    • 先声明共用体类型再定义共用体对象
    union 共用体类型名 共用体对象名列表; 
    • 同时声明共用体类型和定义共用体对象
    union 共用体类型名 { 成员列表 } 共用体对象名列表
    • 直接定义共用体对象
    union { 成员列表 } 共用体对象名列表;

    义共用体对象时可以进行初始化,但只能按一个成员给予初值, 例如:

    union A x={ 5678 }; //正确,只能给出1个初值 
    union A y={5,6,7,8}; //错误,试图给出4个初值(结构体做法)

    共用体对象的使用主要是引用它的成员,方法是对象成员引用运算 (),例如:

    x.m=5678; //给共用体成员赋值 
    cout<<x.m<<","<<x.n<<","<<x.a<<","<<x.b<<endl;   //输出 5678,5678,46,46  
    cin>>x.m>>x.n>>x.a>>x.b;  
    x.n++; //共用体成员运算

    第1句给成员m赋值5678,由于所有成员内存是共享的,因此每个成员都是这个值。

    第2句输出mn5678,输出ab46,因为ab类型为char, 仅使用共享内存中的一部分(4个字节的低字节),即5678 (0x162E)(注意是16进制0000,0000)的0x2E(46)

    第三句每个成员的起始地址是相同的,当运行第3句时输入1 2 3 4↙x.m得到1,但紧接着x.n得到2时,x.m也改变为2了(因为共 享),依次类推,最终x.b得到4时,所有成员都是这个值。

    第4句当x.n自增运算后,所有成员的值都改变了。

    由于成员是共享存储空间的,使用共用体对象成员时有如下特点:

    • 修改一个成员会使其他成员发生改变,所有成员存储的总是最后 一次修改的结果;
    • 所有成员的值是相同的,区别是不同的类型决定了使用这个值的全部或是部分;
    • 所有成员的起始地址值是相同的,因此通常只按一个成员输入、 初始化;

    2 枚举类型

    枚举类型是由用户自定义的由多个命名枚举常量构成的类型,其声 明形式为:

    enum 枚举类型名 {命名枚举常量列表};

    例如:

    enum DAYS {MON,TUE,WED,THU,FRI,SAT,SUN};

    DAYS是枚举类型,MON等是命名枚举常量。默认时枚举常量总是 从0开始,后续的枚举常量总是前一个的枚举常量加一。如MON为 0,TUE为1,……,SUN为6。

    (1)可以在(仅仅在)声明枚举类型时,为命名枚举常量指定值。 例如:

    enum COLORS {RED=10,GREEN=8,BLUE,BLACK,WHITE};

    RED为10、GREEN为8、BLUE为9、BLACK为10、WHITE为11。

    (2)命名枚举常量是一个整型常量值,也称为枚举器,在枚举类 型范围内必须是唯一的。命名枚举常量是右值不是左值,例如:

    RED=10; //错误,RED不是左值,不能被赋值 
    GREEN++; //错误,GREEN不是左值,不能自增自减

    定义枚举类型对象有三种形式:

    enum 枚举类型名 {命名枚举量列表} 枚举对象名列表;
    enum 枚举类型名 枚举对象名列表; //在已有枚举类型下,最常用的定义形式 
    enum {命名枚举量列表} 枚举对象名列表; //使用较少的定义形式

    可以在定义对象时进行初始化,其形式为:

    枚举对象名1=初值1, 枚举对象名2=初值2,……;
    enum DIRECTION {LEFT,UP,RIGHT,DOWN,BEFORE,BACK} dir=LEFT;

    当给枚举类型对象赋值时,若是除枚举值之外的其他值,编译器会 给出错误信息,这样就能在编译阶段帮助程序员发现潜在的取值超出规定范围的错误。例如:

    enum COLORS color; 
    color=101; //错误,不能类型转换 
    color=(COLORS)101; //正确,但结果没有定义

    3 typedef

    可以用typedef声明一个新类型名来代替已有类型名,其形式为:

    typedef 已有类型名 新类型名;

    其中已有类型名必须是已存在的数据类型的名称,新类型名是标识 符序列,习惯上用大写标识;如果是多个新类型名,用逗号() 作为间隔。最后以分号()结束。例如:

    typedef unsigned char BYTE; //按计算机汇编指令习惯规定的字节型 
    typedef unsigned short WORD; //按计算机汇编指令习惯规定的字类型 
    typedef unsigned long DWORD; //按计算机汇编指令习惯规定的双字类型

    C++程序设计-西北工业大学-魏英、姜学锋、刘君瑞

    展开全文
  • 共用体是一种数据格式,它能够存储不同的数据类型,但在同一时间只能存储其中的一种类型共用体的用途之一是,当数据使用两种或更多种格式,但不会同时使用这些格式时,可以节省空间。 union 共用体名 {  成员...

    共用体

    几种不同类型的变量存放到同一段内存单元中。也就是使用覆盖技术,几个变量互相覆盖。这种几个不同的变量共同占用一段内存的结构

    共用体是一种数据格式,它能够存储不同的数据类型,但在同一时间只能存储其中的一种类型。共用体的用途之一是,当数据使用两种或更多种格式,但不会同时使用这些格式时,可以节省空间。


    union 共用体名
    {
       成员列表
    }变量列表;

    例如

    union data
    
    {
    
        int i;
    
        char ch;
    
        float f;
    
    } a, b, c

    对于这里定义的共用体变量a,b,c。下面的引用方式是正确的:a.i (引用共用体变量中的整型变量i),

    而不能引用共用体变量,例如:printf("%d",a); <==这种用法是错误的。

    因为a的存储区内有好几种类型的数据,分别占用不同长度的存储区,这些共用体变量名a,难以使系统确定究竟输出的是哪一个成员的值。

    特点

    1.同一个内存段可以用来存放几种不同类型的成员,但是在每一瞬间只能存放其中的一种,而不是同时存放几种。换句话说,每一瞬间只有一个成员起作用,其他的成员不起作用,即不是同时都在存在和起作用。

    2.共用体变量中起作用的成员是最后一次存放的成员,在存入一个新成员后,原有成员就失去作用。

    3.共用体变量的地址和它的各成员的地址都是同一地址。

    4.不能对共用体变量名赋值,也不能企图引用变量名来得到一个值。

    5.共用体类型可以出现在结构体类型的定义中,也可以定义共用体数组。反之,结构体也可以出现在共用体类型的定义中,数组也可以作为共用体的成员。

    int main()
    {
    
        char input;
    printf("成员类型\n");
    scanf("%c",&input);
    printf("数字\n");
    switch(input)
    {
    case 'i':
    scanf("%d",&temp.i);
    break;
    case 'c':
    scanf("%c",&temp.c);
    break;
    case 'f':
    scanf("%f",&temp.f);
    break;
        case 'd':
    scanf("%lf",&temp.d);
    break;
    }
    switch(input)
    {
    case 'i':
    printf("%d",temp.i);
    break;
    case 'c':
    printf("%c",temp.c);
    break;
    case 'd':
    printf("%lf",temp.c);
    case 'f':
    printf("%f",temp.f);
    break;
    }
    system("pause");
    }

     

    展开全文
  • 共用体类型 有时想用同一段内存单元存放不同类型的变量。这种使几个不同的变量共享同一段内存的结构,称为“共用体”类型结构(也称为“联合”)。 定义 union 共同体名{成员表列}变量表列; 定义共用体类型: ...
  • 共用体类型

    2017-03-12 19:34:00
    往往在数据处理中,有时需要对同一段内存空间安排不同的用途,这时用共用体类型比较方便。 2.形式 union Data { int i; char ch; float f;}a,b,c; 3.引用共用体变量的方式 如a.f; 4.共...
  • C语言_共用体类型

    2020-07-07 14:50:48
    1.什么是共用体类型 使用同一段内存单元存放不同类型的变量称为共用体 union 共用体 { 成员列表 }变量表列; 三种方式定义 union Data { int i; char ch; float f; }a,b,c; union Data { int i; char ...
  • #include #include #include #include struct { int num; char name[20];... printf("%d %s %c %c %d",per[i].num,per[i].name,per[i].sex,per[i].job,per[i].category.clas);... printf("%d %s %c %c %s",per[i]....
  • 共用体类型的特性

    2021-05-22 17:19:37
    (1) 共用体类型的容量 共用体类型可以有多个成员变量,但是,这些成员变量存储在同一个内存空间。所以,共用体类型变量的容量,是由容量最大的成员变量决定。例如: 程序运行结果如下: 可以看到,union ...
  • C语言数据类型共用体

    千次阅读 2016-04-07 17:49:21
    1.定义: 在进行某些算法的C语言编程的时候,需要使几种不同类型的变量存放到同一段内存...2.共用体类型的定义 union 共用体类型标示符 { 类型说明符 变量名; }; 例如: union data { int i; char ch
  • 共用体特点

    2020-02-22 16:05:45
    共用体数据类型有以下几个特点 1)使用共用体变量的目的是希望用同一个内存段存放几种不同类型数据,但请注意,在每一个瞬间只能存放其中一种,而不是同时存放几种; 2)能够访问的是共用体变量中最后一次被赋值的...
  • 共用体(union)是一种数据格式,它是能够存储不同的数据类型,但只能同时存储其中的一种类型特点: 1.成员共用内存 共用体中使用覆盖技术让数据成员之间相互覆盖,以实现不同数据成员共用同一段内存。 union ...
  • 9.5 共用体类型 9.5.1 什么是共用体类型 有时想用同一个内存单元存放不同的类型的变量。例如,把一个int变量 ,char变量和float变量放在同一个地址开始的内存单元中。 定义共用体类型变量的一般形式为: union ...
  • 前期回顾 ... 共用体类型 1. 什么是共用体类型   用同一段内存单元存放不同类型的变量。而这种使几个不同的变量共享同一段内存的结构,称为 “共用体” 类型的结构。 2. 形式 union Data { i...
  • C++共用体类型union 共用体是一种构造数据类型,它是将不同类型的变量存放在同一内存区域内。共同体也称为联。各成员的内存地址是相同的。 结构体变量的各成员占用连续的不同存储空间,而共用体变量的各成员占用同...
  • C语言(共用体类型

    千次阅读 2017-12-27 07:09:52
    定义 用同一段内存单元存放不同类型的变量; 使几个不同的变量共享同一段内存的结构,称为 “共用体” ...定义共用体类型变量的一般形式 union 共用体名 { 成员表列 }变量表列; union Data { int i; char ch; ...
  • 共用体

    2019-11-29 03:49:12
    定义:共用体关键字为union,顾名思义,就是用足够的空间来放置多个数据成员中的**“一个”,允许您在相同的内存下存储不同的数据类型**。 特点: 可以定义一个带有多成员的共用体。 公用体的所有成员公用一个空间...
  • C语言共用体

    热门讨论 2021-07-10 16:31:55
    上一篇文章:动态数组的实现,结合指针与结构体实现链表,以及链表相关操作 ...(一)先定义共用体类型,再定义该类型的变量,格式union 共用体类型名 共用体变量; union uni { int a; double b; }; union uni
  • 构造类型 -- 共用体

    2021-09-03 16:01:50
    结构体与共用体相比,最大的特点是成员属于合作关系。内存空间大小是按照结构体成员定义顺序来分配的。但是,共用体则不同,共用体中的成员是敌我关系。同一时刻,只能有一个成员生效。根据当前成员所占内存最大的...
  • C++ 共用体

    2020-05-20 20:12:09
    union 共用体类型名 { 成员类型 共用体成员1; 成员类型 共用体成员2; } 声明 先定义,后声明: union myUnion { int i; char ch; float f; }; myUnion u;//声明变量 在定义时声明 union myUnion { int .

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 13,532
精华内容 5,412
关键字:

共用体类型数据的特点