• 结构体联合枚举


      1 /*
      2 复习  指针 
      3         堆内存 函数传参
      4 
      5         如何申请堆内存   malloc
      6         int*p=(int*)malloc(sizeof(int)*10);
      7 
      8         参考数组的使用方式  p[0] p[1] p[2]....  p[9]  (p[10] 会有越界)
      9 
     10         free(p);
     11 
     12         函数传参  int  int数组 二维数组 double 数组
     13 
     14             函数传参 这一块使用的
     15         数组指针  指针数组 ---->指针+数组
     16         const限定 +指针 (不能修改传参的内容)
     17 
     18         if(x==2)  if(2==x)
     19 
     20         const 避免在函数中修改了不该修改的内容  避免可能出现的逻辑错误
     21 
     22 
     23 新内容 结构体联合枚举
     24 
     25 1.结构体 关键字 struct定义一个结构体类型   .点运算符 ->运算符
     26 
     27     数组  存放一种相同类型的数据
     28 
     29     存放一个学生的信息  名字(字符数组) 学号(整数) 身高体重(float) 分数.....
     30 
     31     存放一种不同类型的数据 ----->结构体类型(存放相关联)
     32     
     33     取别名  给结构体类型取一个更短的名字 方便使用
     34     typedeof 类型别名
     35     typedef int myINT;   使用别名和类型一致
     36 
     37     作用  类型名字太长  取一个短的名字方便使用
     38             取一谢合适的别名有助于提高代码的可读性
     39 
     40             size_t  time_t
     41             结构体大小 结构体对齐
     42             结构体大小 >=  结构体所有成员大小之和
     43 
     44             存在对齐操作目的  取成员的时候 提高效率 通过浪费一点空间 提高运行效率
     45             建议 比较小的成员放到前面  减少对齐浪费空间
     46 
     47             ++i i++
     48 
     49 
     50 2.联合(用的比较少)
     51     共用体 union
     52     成员共同使用一块空间    存放一般同时只能存放一个数据
     53     联合大小>=联合最大成员之和
     54     16进制  %x  只能整数16进制
     55     float 也是二进制的方式存放在内存中
     56 
     57     结构体  炕  可以多个人挤在一起
     58     联合  单人床 每次只能一个人
     59 
     60 
     61 3.枚举
     62     switch 分支结构
     63     case
     64 
     65     把类型的值全部都列举出来   方向 上下左右四个方向
     66     enum  枚举的关键字
     67         
     68         
     69         
     70         
     71         */
     72 #include<stdio.h>
     73 #include<stdlib.h>
     74 #include<string.h>
     75 #include<time.h>
     76 struct student//结构体类型  存放说明类型的数据
     77 {
     78     char name[20];//存放的姓名  成员变量  这个结构体包含这些数据
     79     int ID;
     80     float height;
     81     //.....
     82 };
     83 
     84 typedef struct student ST; //ST作为结构体类型的别名
     85 typedef struct student* PST;//PST 结构体指针类型的别名
     86 
     87 //---->student 完整的类型  struct  student
     88 
     89 void myfun(struct student stu1)
     90 {
     91     //不能修改实参的值   这里形参会定义一个新的结构体(有内存)
     92 }
     93 void myfun2(struct student *p)
     94 {
     95     (*p).name;
     96     p->name;//这两行等价  结构体->成员
     97 
     98     ST shuaigangs;//定义变量
     99     PST ou;//指针
    100     ou = (PST)malloc(sizeof(ST));
    101 }
    102 typedef struct teacher
    103 {
    104     int age;
    105     int ID;
    106 }TE,*PTE;//定义类型的时候取别名
    107 //TE相当于结构体类型
    108 //PTE结构体指针类型的别名
    109 
    110 
    111 void test()
    112 {
    113     struct student guang;//定义结构体变量
    114     guang.height = 167.22;
    115     guang.ID = 65;
    116     //guang.name[0] = 'g';//strcpy  用于给字符数组赋值
    117     strcpy(guang.name, "广广");
    118     struct student socool = {"纯帅",123,180.2};
    119 
    120     printf("ID是%d
    ", socool.ID);//结构体成员.变量
    121     printf("名字是%s
    ", socool.name);
    122 
    123     struct student arr[10];
    124     for (int i = 0; i < 10; ++i)
    125     {
    126         arr[i].name;
    127         //(arr + i)->name;
    128     }
    129     struct student *p;
    130     p = (struct student*)malloc(sizeof(struct student) * 10);
    131     p[0].name;
    132     free(p);
    133 }
    134 typedef int myINT;
    135 
    136 void test2()
    137 {
    138     myINT x = 3;
    139     TE m;//结构体变量
    140     PTE n;//结构体指针变量
    141 
    142 }
    143 struct str
    144 {
    145     char name[10];
    146     int ID;
    147     float height;
    148     double score;
    149     //.....
    150 };
    151 
    152 union testNum  //联合类型定义方式
    153 {
    154     int x;
    155     float y;
    156     char name[10];
    157 };
    158 void fun(int dA[][20])//int (*dA)[20]
    159 {
    160     for (int i = 0; i < 10; i++)
    161     {
    162         for (int j = 0; j < 20; j++)
    163         {
    164             dA[i][j];//
    165         }
    166     }
    167 }
    168 
    169 //枚举
    170 enum dir
    171 {
    172     UP=72,DOWN=80,LEFT=75,RIGHT=77        //列举这个类型可能出现的所有的值
    173 };//有名字的常量  可以放到switch的case后面
    174 //这些常量可以手动设置值
    175 //常量有名字 提高代码的可读性
    176 //在定义的时候  没有给他设置初值  那么默认从0开始赋值  后一个是前一个加1
    177 enum week
    178 {
    179     Monday,Tuesday,Wensday=3,Thurday,Friday
    180 };
    181 void test4()
    182 {
    183     //推箱子 贪吃蛇
    184     enum dir way = UP;
    185     switch (way)
    186     {
    187     case UP:
    188         break;
    189     case DOWN:
    190         break;
    191     case LEFT:
    192         break;
    193     case RIGHT:
    194         break;
    195     default:
    196         break;
    197     }
    198 }
    199 int main()
    200 {
    201     printf("结构体大小%d
    ", sizeof(struct str));
    202     printf("联合大小%d
    ", sizeof(union testNum));
    203     union testNum num;
    204     num.y = 3.14f;
    205     printf("%x", num.x);
    206 //    test();
    207     //time_t    //存放时间类型
    208     /*int map[10][20];
    209     fun(map);*/
    210     //int *p;//指必须赋值(赋值变量地址) 才能使用 使用指针指向的变量
    211     //*p = 3;
    212 
    213     getchar();
    214     return 0;
    215 }
  • 相关阅读:
    vue项目中 添加全局的随机数、随机数数组filter过滤器,并在vue的methods中使用filter过滤器
    配置如何在公网环境访问本地开发环境的微服务nat123一款很好用的公网映射工具
    使用vue开发简单的table表格插件,表头固定,内容区可滚动
    springboot study
    Clickhouse上用Order By保证绝对正确结果但代价是性能
    Java SE学习笔记
    集合与泛型
    Java常用类
    Maven
    protobuf学习详解
  • 原文地址:https://www.cnblogs.com/liugangjiayou/p/10568342.html
Copyright © 2020-2023  润新知