• union联合体使用详解


    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语句用于输出各成员项的值。

  • 相关阅读:
    关于下拉框在页面加载时候选中值得问题
    《锋利的jQuery》要点归纳(二) jQuery中的DOM操作(上)
    《锋利的jQuery》要点归纳(三) jQuery中的事件和动画(下:动画篇)
    《锋利的jQuery》要点归纳(四)jQuery对表单、表格的操作及更多应用(上:表单应用)
    getElementById函数的一些发现
    《锋利的jQuery》要点归纳(三) jQuery中的事件和动画(上:事件篇)
    《锋利的jQuery》要点归纳(四)jQuery对表单、表格的操作及更多应用(中:表格应用)
    BENNY妙笔生花博皮博客园即将发布
    《锋利的jQuery》要点归纳(二) jQuery中的DOM操作(下)
    《锋利的jQuery》要点归纳(一) jQuery选择器
  • 原文地址:https://www.cnblogs.com/leezhxing/p/4619185.html
Copyright © 2020-2023  润新知