结构体大小和内存结构
1 #define _CRT_SECURE_NO_WARNINGS 2 #include<stdio.h> 3 #include<string.h> 4 #include<stdlib.h> 5 6 //结构体需要根据数据类型进行内存对齐 7 //struct stus 8 //{ 9 // char name[20];//20 10 // unsigned int age;//4 11 // char tel[15];//15 12 // char sex;//1 52 13 // float scores[3];//12 14 //}stu; 15 16 struct stus 17 { 18 //char * p; //4 19 //char arr[2];//2 8 20 //short d; //2 16 21 //int c; //4 22 //long g;//4 23 //double f;//8 24 24 //float h[2];//8 40 25 26 27 double f;//8 24 28 float h[2];//8 40 29 long g;//4 30 int c; //4 31 char * p; //4 32 short d; //2 16 33 char arr[2];//2 8 34 35 36 /* 37 姓名: char name[200]; 38 等级: int 39 当前经验:int 40 攻击: int 41 防御:int 42 技能冷却:foat 43 44 */ 45 46 47 }stu; 48 49 50 int main() 51 { 52 53 printf("结构体大小%d ", sizeof(stu)); 54 55 system("pause"); 56 return EXIT_SUCCESS; 57 }
结构体学生成绩排序
1 #define _CRT_SECURE_NO_WARNINGS 2 #include<stdio.h> 3 #include<string.h> 4 #include<stdlib.h> 5 6 struct stu1 7 { 8 //成员列表 9 char name[21]; 10 float scores[3]; 11 }; 12 int main() 13 { 14 struct stu1 s[3]; 15 for (int i = 0; i < 3; i++) 16 { 17 printf("请您输入学生 姓名 成绩 : "); 18 scanf("%s%f%f%f", s[i].name, &s[i].scores[0], &s[i].scores[1], &s[i].scores[2]); 19 } 20 //冒泡排序 21 for (int i = 0; i < 3 - 1; i++) 22 { 23 for (int j = 0; j < 3 - i - 1; j++) 24 { 25 26 int sum1 = s[j].scores[0] + s[j].scores[1] + s[j].scores[2]; 27 int sum2 = s[j + 1].scores[0] + s[j + 1].scores[1] + s[j + 1].scores[2]; 28 if (sum1 > sum2) 29 { 30 //结构体交换 交换所有成员列表中的数据 31 //交换姓名 32 char temp[21] = { 0 }; 33 strcpy(temp, s[j].name); 34 strcpy(s[j].name, s[j + 1].name); 35 strcpy(s[j + 1].name, temp); 36 37 //交换成绩 38 39 for (int k = 0; k < 3; k++) 40 { 41 float temp = s[j].scores[k]; 42 s[j].scores[k] = s[j + 1].scores[k]; 43 s[j + 1].scores[k] = temp; 44 } 45 46 } 47 } 48 } 49 50 51 52 53 for (int i = 0; i < 3; i++) 54 { 55 printf("姓名:%s ", s[i].name); 56 printf("成绩: %.1f %.1f %.1f ", s[i].scores[0], s[i].scores[1], s[i].scores[2]); 57 } 58 59 60 system("pause"); 61 return EXIT_SUCCESS; 62 }
学生成绩优化
1 #define _CRT_SECURE_NO_WARNINGS 2 #include<stdio.h> 3 #include<string.h> 4 #include<stdlib.h> 5 6 struct stu1 7 { 8 //成员列表 9 char name[21]; 10 float scores[3]; 11 }; 12 int main() 13 { 14 struct stu1 s[3]; 15 for (int i = 0; i < 3; i++) 16 { 17 printf("请您输入学生 姓名 成绩 : "); 18 scanf("%s%f%f%f", s[i].name, &s[i].scores[0], &s[i].scores[1], &s[i].scores[2]); 19 } 20 //冒泡排序 21 for (int i = 0; i < 3 - 1; i++) 22 { 23 for (int j = 0; j < 3 - i - 1; j++) 24 { 25 26 int sum1 = s[j].scores[0] + s[j].scores[1] + s[j].scores[2]; 27 int sum2 = s[j + 1].scores[0] + s[j + 1].scores[1] + s[j + 1].scores[2]; 28 if (sum1 > sum2) 29 { 30 //结构体交换 交换所有成员列表中的数据 31 ////交换姓名 32 //char temp[21] = { 0 }; 33 //strcpy(temp, s[j].name); 34 //strcpy(s[j].name, s[j + 1].name); 35 //strcpy(s[j + 1].name, temp); 36 37 ////交换成绩 38 39 //for (int k = 0; k < 3; k++) 40 //{ 41 // float temp=s[j].scores[k]; 42 // s[j].scores[k] = s[j + 1].scores[k]; 43 // s[j + 1].scores[k] = temp; 44 //} 45 46 //结构体变量交换 47 struct stu1 temp = s[j]; 48 s[j] = s[j + 1]; 49 s[j + 1] = temp; 50 51 } 52 } 53 } 54 55 56 57 58 for (int i = 0; i < 3; i++) 59 { 60 printf("姓名:%s ", s[i].name); 61 printf("成绩: %.1f %.1f %.1f ", s[i].scores[0], s[i].scores[1], s[i].scores[2]); 62 } 63 64 65 system("pause"); 66 return EXIT_SUCCESS; 67 }
结构体成员为指针
1 #define _CRT_SECURE_NO_WARNINGS 2 #include<stdio.h> 3 #include<string.h> 4 #include<stdlib.h> 5 6 struct stuinfo 7 { 8 char *name; 9 int age; 10 }; 11 12 int main() 13 { 14 struct stuinfo si; 15 si.name = (char *)malloc(sizeof(char) * 21); 16 17 strcpy(si.name, "张三"); 18 si.age = 18; 19 20 printf("%s %d ", si.name, si.age); 21 22 free(si.name); 23 24 25 system("pause"); 26 return EXIT_SUCCESS; 27 }
结构体指针
1 #define _CRT_SECURE_NO_WARNINGS 2 #include<stdio.h> 3 #include<string.h> 4 #include<stdlib.h> 5 6 struct sinfo 7 { 8 char *name; 9 int age; 10 }stu; 11 int main() 12 { 13 struct sinfo * s = &stu; 14 s->name = (char *)malloc(sizeof(char) * 21); 15 strcpy(s->name, "李芮"); 16 s->age = 50; 17 printf("%s %d ", s->name, s->age); 18 19 free(s->name); 20 21 22 23 system("pause"); 24 return EXIT_SUCCESS; 25 }
堆空间开辟结构体
1 #define _CRT_SECURE_NO_WARNINGS 2 #include<stdio.h> 3 #include<string.h> 4 #include<stdlib.h> 5 6 struct tec 7 { 8 char *name;//4 9 int age;//4 10 }t; 11 12 int main() 13 { 14 struct tec * p = (struct tec *)malloc(sizeof(t)); 15 p->name = (char *)malloc(sizeof(char) * 21); 16 17 strcpy(p->name, "牛玲"); 18 p->age = 18; 19 20 printf("%s %d ", p->name, p->age); 21 22 if (p->name != NULL) 23 { 24 free(p->name); 25 p->name = NULL; 26 } 27 28 if (p) 29 { 30 free(p); 31 p = NULL; 32 } 33 34 35 printf("%d ", sizeof(struct tec *));//无论为什么类型的指针,都是4个 36 37 system("pause"); 38 return EXIT_SUCCESS; 39 }
学生成绩
1 #define _CRT_SECURE_NO_WARNINGS 2 #include<stdio.h> 3 #include<string.h> 4 #include<stdlib.h> 5 struct stu2 6 { 7 //成员列表 8 //char name[21]; 9 char * name; 10 float * scores; 11 }; 12 13 int main() 14 { 15 struct stu2 *p = (struct stu2 *)malloc(sizeof(struct stu2) * 3); 16 for (int i = 0; i < 3; i++) 17 { 18 p[i].name = (char *)malloc(sizeof(char) * 21); 19 p[i].scores = (float *)malloc(sizeof(float) * 3); 20 21 printf("请您输入学生 姓名 成绩 : "); 22 scanf("%s%f%f%f", p[i].name, &p[i].scores[0], &p[i].scores[1], &p[i].scores[2]); 23 24 } 25 26 //冒泡排序 27 for (int i = 0; i < 3 - 1; i++) 28 { 29 for (int j = 0; j < 3 - i - 1; j++) 30 { 31 float sum1 = p[j].scores[0] + p[j].scores[1] + p[j].scores[2]; 32 float sum2 = p[j + 1].scores[0] + p[j + 1].scores[1] + p[j + 1].scores[2]; 33 if (sum1 > sum2) 34 { 35 struct stu2 temp = p[j]; 36 p[j] = p[j + 1]; 37 p[j + 1] = temp; 38 } 39 } 40 } 41 42 43 for (int i = 0; i < 3; i++) 44 { 45 46 printf("姓名:%s ", p[i].name); 47 printf("成绩: %.1f %.1f %.1f ", p[i].scores[0], p[i].scores[1], p[i].scores[2]); 48 } 49 50 51 //释放 52 for (int i = 0; i < 3; i++) 53 { 54 free(p[i].name); 55 free(p[i].scores); 56 } 57 58 free(p); 59 60 61 62 system("pause"); 63 return EXIT_SUCCESS; 64 }
结构体和函数
1 #define _CRT_SECURE_NO_WARNINGS 2 #include<stdio.h> 3 #include<string.h> 4 #include<stdlib.h> 5 6 struct info 7 { 8 char name[21]; 9 int age; 10 }; 11 12 void fun01(struct info s) 13 { 14 strcpy(s.name, "李四"); 15 s.age = 20; 16 17 printf("%s %d ", s.name, s.age); 18 19 } 20 void fun02(struct info *s) 21 { 22 strcpy(s->name, "李四"); 23 s->age = 20; 24 25 } 26 27 28 29 int main1() 30 { 31 struct info s = { "张三",18 }; 32 33 //fun01(s); 34 fun02(&s); 35 36 printf("%s %d ", s.name, s.age); 37 38 system("pause"); 39 return EXIT_SUCCESS; 40 } 41 struct info fun03() 42 { 43 struct info s; 44 strcpy(s.name, "李四"); 45 s.age = 20; 46 47 return s; 48 49 } 50 struct info * fun04() 51 { 52 struct info s; 53 strcpy(s.name, "李四"); 54 s.age = 20; 55 56 return &s; 57 } 58 59 //int fun04() 60 //{ 61 // int a = 10; 62 // return a; 63 //} 64 int main() 65 { 66 struct info s = fun03(); 67 printf("%s %d ", s.name, s.age); 68 69 70 //int a = fun04(); 71 72 73 //struct info * s = fun04(); 74 //printf("%s %d ", s->name, s->age); 75 system("pause"); 76 return 0; 77 78 }
结构体嵌套结构体
1 #define _CRT_SECURE_NO_WARNINGS 2 #include<stdio.h> 3 #include<string.h> 4 #include<stdlib.h> 5 6 struct stra 7 { 8 int a; //4 4 9 float b;//4 8 10 char c;//1 12 9 11 char arr[7]; //16 12 double h;//24 13 }abc; 14 15 struct strb 16 { 17 struct stra abc;//12 16 18 short f; //2 19 char * e; //4 20 short g; 21 //double d; //8 22 }; 23 24 25 /* 26 技能cd: 27 skill01 10 28 skill02 3 29 skill03 7 30 31 */ 32 /* 33 34 名称 35 等级 36 攻击 37 技能: 38 39 40 */ 41 int main() 42 { 43 struct strb strbb; 44 //strbb.d = 10.0f; 45 //strbb.abc.a = 100; 46 47 48 //printf("%d ", strbb.abc.a); 49 50 printf("%d ", sizeof(strbb)); 51 52 53 system("pause"); 54 return EXIT_SUCCESS; 55 }
共用体
1 #define _CRT_SECURE_NO_WARNINGS 2 #include<stdio.h> 3 #include<string.h> 4 #include<stdlib.h> 5 6 //共用体 union 共用体名称 成员列表 共用体变量名 7 union vars 8 { 9 double a; 10 float b; 11 int c; 12 short d; 13 char f; 14 char arr[17];//17 15 }var; 16 int main() 17 { 18 printf("%d ", sizeof(var)); 19 var.a = 100; 20 var.b = 3.14; 21 var.c = 66; 22 printf("%f ", var.a); 23 printf("%f ", var.b); 24 printf("%d ", var.c); 25 26 system("pause"); 27 return EXIT_SUCCESS; 28 }
枚举
1 #define _CRT_SECURE_NO_WARNINGS 2 #include<stdio.h> 3 #include<string.h> 4 #include<stdlib.h> 5 6 enum colors 7 { 8 red = 10, bule, yellow = 20, black, white, green 9 }clo; 10 /* 11 插卡 12 输入密码 13 锁定 14 取款 15 查询 16 退卡 17 锁定解除 18 19 */ 20 /* 21 10 22 移动 23 攻击 24 技能 25 死亡 26 20 27 亮牌子 28 跳舞 29 30 31 */ 32 int main() 33 { 34 clo = 0; 35 36 int val; 37 scanf("%d", &val); 38 switch (val) 39 { 40 case red: 41 break; 42 case bule: 43 break; 44 case yellow: 45 break; 46 case black: 47 break; 48 case white: 49 break; 50 case green: 51 break; 52 default: 53 break; 54 } 55 //switch (val) 56 //{ 57 //case red: 58 // printf("请输入您的密码"); 59 // clo = 1; 60 // printf("红色 "); 61 // break; 62 //case bule: 63 // printf(""); 64 // clo = 2; 65 // clo = 3; 66 // clo = 4; 67 68 // printf("蓝色 "); 69 70 // break; 71 //case yellow: 72 // printf("黄色 "); 73 74 // break; 75 //case black: 76 // break; 77 //case white: 78 // break; 79 //case green: 80 // break; 81 //default: 82 // break; 83 //} 84 85 system("pause"); 86 return EXIT_SUCCESS; 87 }