结构体
现实生活中的对象
属性:静态数据 方法:行为
c语言的结构体类似于其他语言中的类,但结构体中只有属性没有方法
struct student{
int id;
char name[25];
char gender;
int chinese;
int math;
int english;
}
int main(void){
struct student s1={1,"xixi",'F',100,100,100};
return 0;
}
内存模型
1.一片连续的内存空间 2.按声明的顺序存放一个个成员(会有填充,填充是为了对齐)
结构体变量起别名
typedef 类型 别名
typedef struct{
int id;
char name[25];
char gender;
int chinese;
int math;
int english;
}Student
, *pStudent; //不要给指针类型起别名(除非出现新的概念)Student *p;
//结构体类型A,生成了3个变量 A x; A y; A z;
struct A{
int a;
}x,y,z;
//匿名结构体:只能被引用一次
struct {
int a;
}x,y,z;
课堂练习
void sort_students(Student* p[],int n){
for(int i=0;i<n-1;i++){
int max=p[i]->chinese+p[i]->math+p[i]->english;
for(j=i+1;j<n;j++){
int a=p[j]->chinese+p[j]->math+p[j]->english;
if(max<a){
Student* temp=p[i];
p[i]=p[j];
p[j]=temp;
}
}
}
}
print_stu(Student* s){
printf("%d%s",s-->id,s-->name);
}
typedef struct{
int id;
char name[25];
char gender;
int chinese;
int math;
int english;
}Student;
int main(void){
Student s[5];
for(int i=0;i<5;i++){ scanf(%d%s %c%d%d%d,&s[i].id,&s[i].name,&s[i].gender,&s[i].chinese,&s[i].math,&s[i].english);
}//char型scanf将所有空白字符转成一个
Student* pstus[5]={s,s+1,s+2,s+3,s+4};
sort_students(pstus,5);
for(int i=0;i<5;i++){
print_stu(pstus[i]);
}
}
枚举
表示一些离散值