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 }