zoukankan      html  css  js  c++  java
  • 【C基础】之联合体

    1.联合体 
    联合体(union)与结构体(struct)有一些相似之处。但两者有本质上的不同。在结构体中,各成员有各自的内存空间, 一个结构变量的总长度是各成员长度之和。而在联合体中,各成员共享一段内存空间, 一个联合变量的长度等于各成员中最长的长度

    应该说明的是, 这里所谓的共享不是指把多个成员同时装入一个联合变量内, 而是指该联合变量可被赋予任一成员值,但每次只能赋一种值, 赋入新值则冲去旧值

    一个联合体类型必须经过定义之后, 才能使用它,才能把一个变量声明定义为该联合体类型。

    2.变量声明 

    联合变量的声明和结构变量的声明方式相同, 也有三种形式。

    第一种,先定义联合体类型,再声明联合体变量;

    union perdata
    {
       int class;
       char officae[10];
    };
    union perdata a,b; /*说明a,b为perdata类型*/
    

    第二种,定义联合体类型的同时声明联合体变量;

    union perdata
    {
    int class;
    char office[10];
    }a,b;
    

    第三种,直接声明联合体(以匿名的形式定义联合体类型);

    union
    {
    int class;
    char office[10];
    }a,b
    /*经说明后的a,b变量均为perdata类型。a,b变量的长度应等于 perdata 的成员中最长的长度, 即等于office数组的长度,共10个字节。对a,b变量如赋予整型值时,只使用了2个字节,而赋予字符数组时,可用10个字节。*/
    

    3.变量的赋值和使用

    对联合体变量的赋值,使用都只能是对变量的成员进行。

    联合变量的成员表示为: 联合变量名.成员名

    例如,a被说明为perdata类型的变量之后,可使用 a.class,a.office

    不允许只用联合变量名作赋值或其它操作。 也不允许对联合变量作初始化赋值,赋值只能在程序中进行。

    一个联合体变量, 每次只能赋予一个成员值。一个联合变量的值就是联合变员的某一个成员值。

    [例]设有一个教师与学生通用的表格,教师数据有姓名,年龄,职业,教研室四项。学生有姓名,年龄,职业,班级四项。

    main()
    {
       struct
       {
          char name[10];
          int age;
          char job;
          union
          {
             int class;
             char office[10];
          } depa;
       }body[2];
       
      int n,i;
       for(i=0;i<2;i++)
       {
          printf("input name,age,job and department
    ");
          scanf("%s %d %c",body[i].name,&body[i].age,&body[i].job);
          if(body[i].job=='s')
             scanf("%d",&body[i].depa.class);
          else
             scanf("%s",body[i].depa.office);
       }
       printf("name	age job class/office
    ");
       for(i=0;i<2;i++)
       {
       if(body[i].job=='s')
          printf("%s	%3d %3c %d
    ",body[i].name,body[i].age ,body[i].job,body[i].depa.class);
       else
          printf("%s	%3d %3c %s
    ",body[i].name,body[i].age, body[i].job,body[i].depa.office);
       }
    }
    

    本例程序用一个结构数组body来存放人员数据, 该结构共有四个成员。其中成员项depa是一个联合类型, 这个联合又由两个成员组成,一个为整型量class,一个为字符数组office。在程序的第一个for语句中,输入人员的各项数据,先输入结构的前三个成员

    name,age和job,然后判别job成员项,如为"s"则对联合depa·class输入(对学生赋班级编号)否则对depa·office输入(对教师赋教研组名)。

    在用scanf语句输入时要注意,凡为数组类型的成员,无论是结构成员还是联合成员,在该项前不能再加"&"运算符。如程序第18行中body.name是一个数组类型,第22行中的body.depa.office也是数组类型,因此在这两项之间不能加"&"运算符。程序中的第二

    个for语句用于输出各成员项的值。

    转自:https://www.cnblogs.com/leezhxing/p/4619185.html

  • 相关阅读:
    Centos搭建SVN服务器
    JavaScript 对象 之创建对象 学习笔记
    ThinkPHP 学习记录
    Git 版本控制 在 WIN 下的一些使用方法
    关于 CSS 的重用性
    双飞翼布局和圣杯布局
    cocos2dx3.8 ios打包脚本编写
    如何做dragonbones的lua绑定(xcode)
    【转】如何做dragonbones的lua绑定(Android)
    【转】如何做dragonbones的lua绑定(VisualStudio)
  • 原文地址:https://www.cnblogs.com/xuelisheng/p/9356549.html
Copyright © 2011-2022 走看看