1.typedef
#include <stdio.h> //typedef是为了已存在的数据类型起别名 //与#define不同的是,#define发生在预处理,typedef发生在编译阶段 typedef unsigned int ui; typedef unsigned long ul; int main() { ui a = 10; ul b = 110; printf("%d ",a); printf("%d ",b); return 0; }
2.结构体的定义 修改 调用
#include <stdio.h> #include <string.h> //结构体名称 struct stu { //编号 姓名 性别 成绩 年龄 地址 int id; char name[21];//一个中文是两个字符 char sex; int age; int score; char adde[51]; }; int main() { //定义结构体变量 //数据类型 (struct stu) //按照结构体成员列表顺序依次初始化数据 struct stu on ={01,"巫妖果子",'男',20,90,"江西抚州东乡区"}; //打印结构体信息 printf("学号:%d %s,性别:%c,今年%d岁,平均成绩:%d,籍贯:%s人 ",on.id,on.name,on.sex,on.age,on.score,on.adde); //结构体的修改 on.id=02; //字符串拷贝 strcpy(目标字符串,源字符串) strcpy(on.name,"果子巫妖"); printf("学号:%d %s,性别:%c,今年%d岁,平均成绩:%d,籍贯:%s人",on.id,on.name,on.sex,on.age,on.score,on.adde); return 0; }
3.结构体数组
#include <stdio.h> //为结构体起别名 typedef struct stu student; struct stu { //编号 姓名 性别 成绩 年龄 地址 int id; char name[21];//一个中文是两个字符 char sex; int age; int score; char adde[51]; }; int main() { int i; //定义结构体数组 数组名 [元素个数] student s[3] = { {01,"巫妖果子",'男',20,90,"江西抚州东乡区星港湾"}, {02,"果子巫妖",'男',20,80,"江西抚州东乡区东景花苑"}, {03,"独孤求败",'男',20,100,"江西抚州东乡区学府世家"} }; //通过结构体数组[下标].成员 找到对应内容 for(i=0;i<3;i++) { printf("学号:%d %s,性别:%c,今年%d岁,平均成绩:%d,籍贯:%s ", s[i].id,s[i].name,s[i].sex,s[i].age,s[i].score,s[i].adde); } return 0; }
4.结构体数组的排序
#include <stdio.h> //为结构体起别名 typedef struct stu { //编号 姓名 性别 成绩 年龄 地址 int id; char name[21];//一个中文是两个字符 char sex; int age; int score; }student; void BubbleSort(student* s,int len) { int i,j; student temp; for(i = 0 ;i<len-1;i++) { for(j = 0 ;j<len-1-i;j++) { //根据成绩排序 两个相邻结构体比较其它成员 if(s[j].score<s[j+1].score) { temp=s[j]; s[j]=s[j+1]; s[j+1]=temp; } } } } int main() { int i; student s [2]; //通过键盘获取学生信息 for(i=0;i<2;i++) { scanf("%d%s%s%d%d ",&s[i].id,&s[i].name,&s[i].sex,&s[i].age,&s[i].score); } BubbleSort(s,2); for(i=0;i<2;i++) { printf("学号:%d %s,性别:%s,今年%d岁,平均成绩:%d", s[i].id,s[i].name,s[i].sex,s[i].age,s[i].score); } return 0; }
5.结构体赋值
#include <stdio.h> #include <string.h> struct stu { char name[21]; int age; char sex; }; int main() { struct stu s; struct stu s1; strcpy(s.name,"玉兔"); s.age=18; s.sex='F'; s1=s; printf("姓名:%s ",s1.name); printf("性别:%s ",s1.sex =='M'?"男":"女"); printf("年龄:%d ",s1.age); return 0; }
6.结构器嵌套
#include <stdio.h> #include <string.h> struct Person { char name[21]; char profession [10];//职业 char sex; }; struct equip//装备 { struct Person p; int Clearlevel;//铭文等级 char responsible [20];//负责 }; int main(void) { //为结构体赋值 struct equip e;//struct equip数据类型 strcpy(e.p.name,"老亚瑟"); strcpy(e.p.profession,"坦克/战士"); e.p.sex='男'; e.Clearlevel=150; strcpy(e.responsible,"保护射手/负责游走"); printf("%s是一名:%s,性别:%c,铭文等级:%d级负责%s", e.p.name,e.p.profession,e.p.sex,e.Clearlevel,e.responsible); return 0; }
7.共用体(联合体)
- 联合union是一个能在同一个存储空间存储不同类型数据的类型
- 联合体所占的内存长度等于其最长成员的长度倍速,也有叫做共用体
- 同一内存端可以用来存放几种不同类型的成员,但每一瞬时只有一种起作用:
- 共用体变量中起作用的成员是最后一次存放的成员,在存入一个新的成员后原有的成员的值会被覆盖
- 共用体变量的地址和它的个成员的地址都是同一地址
8.链表