• C语言学习日记5


      又看了一遍超体,印象最深的是那个黑人上课的场景,真是我想象中的校园,一心学术。

      1、结构体

        没有结构体之前,在C语言中,数据的组织依靠:变量+数组。最简单的时候,只需要使用基本数据类型来定义单个变量,需要几个变量就定义几个。后来情况变复杂了,有事需要很多意义相关的变量,这时候数组出现了。数组解决了需要很多类型相同,意义相关的变量的问题。  但是数组是有限制的。数组最大的不足在于,一个数组只能存储很多个数据类型相同的变量。(譬如使用一个数据结构来保存一个学生的所有信息:姓名,学号,性别。)

        什么是结构体?结构体其实就是一个集合,集合中包含很多个元素,这些元素的数据类型可以相同也可以不相同。所以结构体是一种数据封装的方法。结构体存在的意义就在于,把很多数据类型不同的变量封装在一起,组成一个大的新的数据类型。

        数据结构:把庞大复杂的数据用一定的方式组织管理起来,便于操作(查找,增加,删除等)这就叫数据结构。 

    #include <stdio.h>
    //PS:
    //1.结构体类型的定义是在函数外面,不是lim
    //2.结构体定义的是一个新的组合类型,而不是变量,也不消耗内存

    struct student
    {
      char name[20]; //学生姓名
      unsigned int num; //学号
      int male; //性别
    };  //注意;不能少

    int main()
    {
      struct student s1; //s1是一个变量,类型是struct student,定义,无初始化 
      //给结构体变量赋值
      s1.name[0]='t';
      s1.name[1]='h';
      s1.name[2]='o';
      s1.name[3]='r';
      s1.name[4]='';
      s1.num=1;
      s1.male=0;
      printf("s1.name=%s ",s1.name);
      printf("s1.num=%d ",s1.num);
      printf("s1.male=%d ",s1.male);
      // printf(" ");
      return 0;
    }

      结构体和数组的关联:数组是一种特殊的结构体,特殊之处在于封装内的各个元素类型是相同的。结构体和数组都输对一些子元素的封装,因此定义的时候都是封装作为整体定义,但是使用的时候,都是使用封装中的子元素。一般结构体变量和数组变量都不会作为一个整体操作。

      使用结构体的步骤:

        第一步:定义结构体类型。结构体类型的定义是在函数外面。

        第二步:使用第一步定义的类型来定义结构体变量。

        第三步:使用变量。实际上使用结构体变量的时候,使用的是结构体变量中封装的各个子元素,而不是结构体变量本身。

    结构体定义 

    struct student
    {
      char a;
      int b;
      float c;
      double d;
    };

    int main()
    {
      struct student s=
      {
        .a = 1,
        .b = 2,
        .c = 3,
        .d = 4,//C++扩展的定义方式,梦幻级的方法,想定义谁就定义谁,可以跳过元素
      } ;

      struct student s0={1,2,3,4};完全初始化,依次一个个初始化。

    }

      2、共用体union

        union在定义和使用形式上和struct很相似。但是两种数据结构是完全不同的两类东西。

        结构体,是对多个数据的组合与封装。

        共用体,共用体中只有一个东西,只是它被好几个名字(和类型)共用。

    #include <stdio.h>
    struct male
    {
    char name[20];//男生。名字。年纪。篮球课成绩。
    int age;
    int basketball;
    };

    struct female
    {
    char name[20];//女生。名字。年纪。健美操成绩。
    int age;
    int aerobics;
    };

    union student
    {
    struct male m;//使用.m时男生,male结构体。用.f女生,female结构体
    struct female f;
    };

    int main(void)
    {
    union student u1;
    u1.f.aerobics = 100;
    printf("u1.m.basketball=%d u1.f.aerobics=%d ",u1.m.basketball,u1.f.aerobics);
    return 0;
    }

      3、宏定义

    #define N 123//宏定义的格式

    //ps:1.宏定义一般在函数的外面  2.宏定义必须要先定义,在使用宏。  3.宏名一般用大写

  • 相关阅读:
    AGC022E Median Replace
    洛谷3195 [HNOI2008]玩具装箱TOY(斜率优化+dp)
    hdu3507 斜率优化学习笔记(斜率优化+dp)
    洛谷3176 [HAOI2015]数字串拆分 (矩阵乘法+dp)
    洛谷5038 [SCOI2012]奇怪的游戏(二分+网络流+判断奇偶)
    洛谷2543AHOI2005]航线规划 (树剖+线段树+割边思路)
    洛谷3973 TJOI2015线性代数(最小割+思维)
    CF911G Mass Change Queries(线段树+暴力)
    洛谷2151[SDOI2009]HH去散步(dp+矩阵乘法优化)
    CF1092F Tree with Maximum Cost(dfs+dp)
  • 原文地址:https://www.cnblogs.com/thorzhou/p/5573582.html
Copyright © 2020-2023  润新知