结构体联合枚举
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 }