结构体联合枚举

  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\n", socool.ID);//结构体成员.变量
121     printf("名字是%s\n", 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\n", sizeof(struct str));
202     printf("联合大小%d\n", 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 }

 

posted @ 2019-03-20 22:44  insist钢  阅读(422)  评论(0编辑  收藏  举报