结构体类型

  • 结构体类型的定义

    struct 结构体名
    {成员说明表列
    };
    
    struct student
    {long number;char name[20];char sex;
    };
    
  • 结构体变量的定义

    • 先定义结构体类型,再定义其变量

      struct 结构体名
      {成员说明表列
      };
      struct 结构体名 结构体变量列表;
      
    • 定义结构体类型的同时定义结构体变量

      struct 结构体名
      {成员说明表列
      }变量名表列;
      
      struct student
      {long number;char name[20];char sex;
      }stu2;
      
    • 不出现结构体名,直接定义结构体变量

      struct
      {成员说明表列
      }变量名表列;
      
      struct
      {long number;char name[20];char sex;
      }stu2;
      
  • 结构体变量的初始化和引用

结构体数组

定义和引用

#include<stdio.h>
struct student
{long number;char name[20];int age;float math;
};
int main() {int i, num = 0;float sum = 0;struct student class[5] = {{10001,"Li ping",18,96},{10002,"Zhang ping",19,88},{10003,"He fang",18,79},{10004,"Cheng ling",17,69},{10005,"Wang ming",17,57}};for (i = 0; i < 5; i++) {sum += class[i].math;if (class[i].math < 90) {num++;}}printf("sum=%.2f\naverage=%.2f\nnum=%d\n", sum, sum / 5, num);return 0;
}

指向结构体的指针

  • 指向结构体变量的指针

    struct student
    {long number;char name[20];int age;float math;
    };
    struct student stu1;
    struct student *p=&stu1;
    
    • 访问:

      (*p).name
      p->name
      
  • 指向结构体数组成员的指针

    struct student
    {long number;char name[20];int age;float math;
    };
    struct student stu[20];
    struct student *p=stu;
    
  • 示例

    #include<stdio.h>
    struct student1
    {long number;char name[20];char sex;int age;
    };
    struct student1 stu4 = { 10101,"Lixiao",'m',19 };
    struct student1 stu[3] = { { 10102,"Liping",'m',18 } ,{10103,"Zhangping",'m',20},{10104,"Hefang",'f',22} };
    int main() {int i;struct student1* p, * q;p = &stu4;printf(" number   name      sex  age\n");printf(" %5d    %-10s%2c%5d\n", (*p).number, p->name, (*p).sex, p->age);q = stu;for (i = 0; i < 3; i++) {printf(" %5d    %-10s%2c%5d\n", (*q).number, q->name, (*q).sex, q->age);q++;}return 0;
    }
    /*number   name      sex  age10101    Lixiao     m   1910102    Liping     m   1810103    Zhangping  m   2010104    Hefang     f   22
    */
    

结构体与函数

  • 结构体作函数参数

    • 值传递方式的特点:

      #include<stdio.h>
      struct date
      {int nian;int yue;int ri;
      };
      int riqi(struct date a)
      {a.nian = 2018;a.yue = 5;a.ri = 22;return 0;
      }
      int main() {struct date b;b.nian = 2017;b.yue = 4;b.ri = 26;printf("调用前:%d  %d  %d\n", b.nian, b.yue, b.ri);riqi(b);printf("调用后:%d  %d  %d\n", b.nian, b.yue, b.ri);return 0;
      }
      /*
      调用前:2017  4  26
      调用后:2017  4  26--对形参a的成员的修改,不会影响到主调函数中实参b的成员的值。
      */
      
    • 地址传递方式的特点

      #include<stdio.h>
      struct date
      {int nian;int yue;int ri;
      };
      int riqi(struct date *p)
      {(*p).nian = 2018;(*p).yue = 5;(*p).ri = 22;return 0;
      }
      int main() {struct date b;b.nian = 2017;b.yue = 4;b.ri = 26;printf("调用前:%d  %d  %d\n", b.nian, b.yue, b.ri);riqi(&b);printf("调用后:%d  %d  %d\n", b.nian, b.yue, b.ri);return 0;
      }
      /*
      调用前:2017  4  26
      调用后:2018  5  22--对形参p所指的结构体成员的修改,会改变主调函数中实参b的成员的值。
      */
      
  • 结构体作函数返回值

    #include<stdio.h>
    struct StoreLib
    {char name[12];int num;float price;float SumMoney;
    };
    struct StoreLib Goods;
    float Total = 0;
    int list(struct StoreLib Goods)
    {Goods.SumMoney = Goods.num * Goods.price;Total = Total + Goods.SumMoney;printf("%-24s%d\t%.2f\t%.2f\n", Goods.name, Goods.num, Goods.price, Goods.SumMoney);return 0;
    }
    struct StoreLib InputInfo()
    {scanf("%s", Goods.name);scanf("%d%f", &Goods.num, &Goods.price);return Goods;
    };
    int main() {struct StoreLib iGoods[5];int i;printf("请输入5种库存商品信息:商品名称  数量  单价\n");for (i = 0; i < 5; i++) {iGoods[i] = InputInfo();}printf("\n---------------------------------------------\n");printf("库存清单:\n");printf("商品名称\t\t数量\t单价\t小计\n");for (i = 0; i < 5; i++) {list(iGoods[i]);}printf("库存商品金额总计:%.2f\n",Total);return 0;
    }
    /*
    请输入5种库存商品信息:商品名称  数量  单价
    果汁 200 3
    牛奶 100 3
    苹果 120 5
    面包 30 5.5
    水 50 2---------------------------------------------
    库存清单:
    商品名称                数量    单价    小计
    果汁                    200     3.00    600.00
    牛奶                    100     3.00    300.00
    苹果                    120     5.00    600.00
    面包                    30      5.50    165.00
    水                      50      2.00    100.00
    库存商品金额总计:1765.00
    */
    

共用体类型

  • 共用体类型及其变量的定义

    • 一般形式

      union 共用体名
      {成员表列
      };
      union data
      {double a;int i;char ch;
      };
      
      • 先定义类型,再定义变量

        union data
        {double a;int i;char ch;
        };
        union data num1,num2;
        
      • 定义类型同时定义变量

        union data
        {double a;int i;char ch;
        } num1,num2;
        
      • 不出现共用体名,直接定义变量

        union
        {double a;int i;char ch;
        } num1,num2;
        
  • 共用体变量的引用

    #include<stdio.h>
    union student
    {long number;char c;int age;
    };
    int main() {union student s1, s2;s1.number = 10001;s1.c = 'L';s1.age = 65;printf("共用体变量s1成员的值为:\n");printf(" s1.number=%d\n s1.c=%c\n s1.age=%d\n", s1.number, s1.c, s1.age);s1.c = 'W';s2 = s1;printf("共用体变量s2成员的值为:\n");printf(" s2 is %c\n", s2.c);return 0;
    }
    /*
    共用体变量s1成员的值为:s1.number=65s1.c=As1.age=65
    共用体变量s2成员的值为:s2 is W--每一瞬间存储单元中之只能存放一个值,所以每一瞬间只有一个成员起作用
    --覆盖技术,一个新的值存入后原有的成员值就会失去作用,起作用的成员时最后一次存入的成员
    --同一类型的共用体变量之间可以整体赋值,但由于共用一段内存,赋值的操作其实只发生在同一类型共用体变量的成员之间
    --不能对共用体变量名赋值,也不能直接输入、输入共用体变量
    */
    
  • 枚举类型

    #include<stdio.h>
    int main() {enum month{Jan = 1, Feb = 2, Mar, Apr, May}mon;int k;printf("please input a number(1~5):");scanf("%d", &k);mon = (enum month)k;/*强制类型转换*/switch (mon){case Jan:printf("This month is January.\n");break;case Feb:printf("This month is February.\n");break;case Mar:printf("This month is March.\n");break;case Apr:printf("This month is April.\n");break;case May:printf("This month is May.\n");break;default:printf("This month is error.\n");break;}return 0;
    }
    /*
    please input a number(1~5):4
    This month is April.
    */
    
  • typedef类型

    定义别名
    typedef int INTEGER;
    typedef float REAL;
    

第9章-结构体与共同体相关推荐

  1. c语言结构体与共同体课件,《结构体与共同体》PPT课件.ppt

    <<结构体与共同体>PPT课件.ppt>由会员分享,可在线阅读,更多相关<<结构体与共同体>PPT课件.ppt(44页珍藏版)>请在装配图网上搜索. 1 ...

  2. c语言 结构体 ppt,第8章C语言的结构体和共同体.ppt

    <第8章C语言的结构体和共同体.ppt>由会员分享,可在线阅读,更多相关<第8章C语言的结构体和共同体.ppt(41页珍藏版)>请在皮匠网上搜索. 1.1第八章结构体.共用体和 ...

  3. 共同体不是c语言中的一个数据类型,《c语言程序设计教学资料》第12章---构体和共同体.ppt...

    <c语言程序设计教学资料>第12章---构体和共同体 向函数传递结构体 用结构体指针或结构体数组作为函数参数,向函数传递结构体的地址 按值调用 按地址调用 结构体变量作函数参数 实现按值调 ...

  4. C语言程序设计 细节总结(第9章 结构体共用体枚举)

    第9章 结构体.共用体.枚举 9.1 结构体 1.对于同类型结构体变量之间可以整体一次赋值 9.2 指向结构体的指针 9.2.1结构体变量的指针 1.定义格式:struct 结构体名 *结构体指针变量 ...

  5. 结构体与共同体(联合体)的妙用

    结构体与共同体(联合体)的妙用 学习过C语言后,大家都了解了结构体与共同体.两者之间的区别是: 共同体:使几个不同类型的变量共占一段内存(相互覆盖).所占内存长度是各最长的成员占的内存长度. 结构体: ...

  6. 第九章结构体变量实验报告

    实验项目: 1.结构体变量的应用 2.结构体数组的应用 3.共用体的应用 4.结构体指针的应用 姓名:谢丽萍  实验地点:教学楼514教室  实验时间2019.6.26 一.本章要点 1.对结构体和共 ...

  7. 呵呵哒!手把手教你C语言结构体与共同体

    1.声明一个结构体类型的一般形式为:struct 结构体名{成员表列}; (1)在声明类型的同时定义变量 struct student{int num;char name[20];char sex;i ...

  8. C语言结构体和共同体

    文章目录 结构体 用typedef说明一个新类型 结构体类型数据的定义和成员的引用 概述 结构体的定义和使用 结构体数组 结构体排序 结构体赋值 结构体嵌套结构体 共用体(联合体) 结构体 用type ...

  9. 第九章 结构体与共用体

    C程序设计实验报告 姓名:欧阳思健 实验地点: 514实验室 实验时间:2019年6月26日 实验项目: 9.3.1 结构体变量的应用 9.3.2 结构体数组的应用 9.3.3 共用体的应用 9.3. ...

最新文章

  1. 重磅:IBM 340亿美元收购红帽软件,开源生态或将迎来重大变化
  2. mysql temporary_MySQL中的两种临时表
  3. 三星下一代手机芯片由AI来设计,EDA行业老大提供技术
  4. 实践周java基础软件开发app之五子棋
  5. win10+ubuntu双系统下,ubuntu不能访问windows的磁盘分区
  6. linux安装tensorflow教程,Ubuntu 16.04 安装 TensorFlow(GPU支持)
  7. overfitting(过度拟合)的概念
  8. SpringBoot2.0 Actuator 监控参数说明
  9. 【转】.NET Core 可移植类库PCL Portable Class Library详解
  10. mysql 全文索引 权重_MySQL中的全文索引
  11. 登录后 可编辑页面 php,如何查找和编辑登录的php页面以及更改详细信息 - WordPress - srcmini...
  12. SpringMVC开发框架中使用@ResponseBody注解后返回的json字符串中文乱码问题
  13. Netflix 混沌工程手册 Part 3:实践方法
  14. jQuery原型方法first,last,eq,slice源码分析
  15. c性能大容量cket_5千左右预算,既轻薄(高颜值)又高性能的笔记本推荐(兼顾Pr剪辑、Ps修图、CAD制图、办公游戏)...
  16. 阶段3 3.SpringMVC·_06.异常处理及拦截器_2 SpringMVC异常处理之演示程序异常
  17. JavaScript 学习中
  18. 【零基础深度学习教程第一课:深度学习基础】
  19. 科技爱好者周刊(第 219 期):如何防止帐号被黑
  20. java合法标识符有哪些_Java中的合法标识符

热门文章

  1. 数据分析必备——统计学入门基础知识
  2. STM32,读保护解锁
  3. 【20211203】datagrid,数据库管理神器,一个字,绝
  4. cordova插件的创建
  5. 【Unity编程】Unity中关于四元数的API详解
  6. Week of 1.17
  7. 树莓派3B入门使用教程
  8. 什么叫大数据,与云计算有何关系
  9. 维吉尼亚密码 算法 Java实现
  10. 关于elementUI下拉框value和label问题