• C语身教程第七章:结构与连系(8)




    一、连系的定义

    定义一个连系范例的普通方式为:
    union 连系名
    {
    成员表
    };
    成员表中含有多少成员,成员的普通方式为: 范例分析符 成员名 成员名的定名应符合标识符的划定。
    譬喻:
    union perdata
    {
    int >char office[10];
    };
      定义了一个名为perdata的连系范例,它含有两个成员,一个为整型,成员名为>
    二、连系变量的分析

      连系变量的分析和结构变量的分析体式式子类似, 也有三种方式。即先定义,再分析;定义同时分析和间接分析。以perdata范例为例,分析如下:
    union perdata
    {
    int >char officae[10];
    };
    union perdata a,b; /*分析a,b为perdata范例*/
    或应许同时分析为:
    union perdata
    { int >char office[10]; }a,b;或间接分析为: union
    { int >char office[10]; }a,b
    经分析后的a,b变量均为perdata范例。 它们的内存分配示意图如图7—8所示。a,b变量的长度应即是 perdata 的成员中最长的长度, 即即是
    office数组的长度,共10个字节。从图中可见,a,b变量如授予整型值时,只运用了2个字节,而授予字符数组时,可用10个字节。

    连系变量的赋值和运用

      对连系变量的赋值,运用都只能是对变量的成员举办。 连系变量的成员示意为: 连系变量名.成员名 譬喻,a被分析为perdata范例的变量之后,可运用 a.>[例7.15]设有一个教员与教员通用的表格,教员数据有姓名,年龄,职业,教研室四项。教员有姓名,年龄,职业,班级四项。
    编程输入职员数据, 再以表格输入。
    main()
    {
    struct
    {
    char name[10];
    int age;
    char job;
    union
    {
    int >char office[10];
    } depa;
    }body[2];
    int n,i;
    for(i=0;i<2;i )
    {
    printf("input name,age,job and department\n");
    scanf("%s %d %c",body[i].name,&body[i].age,&body[i].job);
    if(body[i].job=='s')
    scanf("%d",&body[i].depa.>else
    scanf("%s",body[i].depa.office);
    }
    printf("name\tage job >for(i=0;i<2;i )
    {
    if(body[i].job=='s')
    printf("%s\t= < %d\n",body[i].name,body[i].age
    ,body[i].job,body[i].depa.>else
    printf("%s\t= < %s\n",body[i].name,body[i].age,
    body[i].job,body[i].depa.office);
    }
    }
      本例程序用一个结构数组body来寄放职员数据, 该结构共有四个成员。此中成员项depa是一个连系范例, 这个连系又由两个成员构成,一个为整型量>
      在用scanf语句输入时要属意,凡为数组范例的成员,无论是结构成员还是联分析员,在该项前不能再加"&"运算符。如程序第18行中
    body[i].name是一个数组范例,第22行中的body[i].depa.office也是数组范例,因而在这两项之间不能加"&"运算符。程序中的第二个for语句用于输入各成员项的值:

    本章小结

    1. 构造和连系是两种构造范例数据,是用户定义新数据范例的严峻身手。构造和连系有良多的类似之处,它们都由成员构成。成员可以具有分比方的数据范例。成员的示意法子类似。都可用三种体式式子作变量分析。

    2. 在结构中,各成员都据有本身的内存空间,它们是同时存在的。一个结构变量的总长度即是实足成员长度之和。在连系中,实足成员不能同时占用它的内存空间,它们不能同时存在。连系变量的长度即是最长的成员的长度。

    3. “.”是成员运算符,可用它示意成员项,成员还可用“->”运算符来示意。

    4. 结构变量可以作为函数参数,函数也可前往指向结构的指针变量。而连系变量不能作为函数参数,函数也不能前往指向连系的指针变量。但可以运用指向连系变量的指针,也可运用连系数组。

    5. 结构定义应许嵌套,结构中也可用结协作为成员,构成构造和连系的嵌套。

    6. 链表是一种严峻的数据结构,它便于完成静态的存储分配。本章介绍是单向链表,还可构成双向链表,循环链表等。




    版权声明: 原创作品,应许转载,转载时请务必以超链接方式标明文章 原始来由 、作者信息和本声明。否则将深究执法责任。

  • 相关阅读:
    组合和继承
    解决不了问题
    [zz]shared_ptr 在 stl容器中排序的陷阱
    char ** 初始化
    [zz]c++ list sort方法
    [zz]ZeroMQ的学习和研究
    shared_prt自己使用记录
    rapidxml使用笔记
    HDOJ_ACM_I love sneakers!
    HDOJ_ACM_PiggyBank
  • 原文地址:https://www.cnblogs.com/zgqjymx/p/1975578.html
Copyright © 2020-2023  润新知