C语言-结构

📅 2026/7/25 21:02:23
C语言-结构
结构是一些值的集合这些值称为成员变量结构的每个成员可以是不同类型的变量访问结构体成员变量的时候用点.来调用struct Stu{//struct Stu是一个结构类型类似于int char name[20]; int age; char tele[20]; char sex[20]; }; int main(){ struct Stu s{张三,20,16273847436,男};//就相当于int a; printf(%s,%d,%s,%s\n,s.name,s.age,s.tele,s.sex); //打印出张三,20,16273847436,男 return 0; }嵌套结构如下struct birthy{ int year; int month; int day; }; struct Stu{ char name[20]; int age; char tele[20]; char sex[20]; struct birthy b; }; int main(){ struct Stu s{张三,20,16273847436,男,{2002,12,12}};//这里的s叫做局部变量 printf(%s,%d,%s,%s,%d年%d月%d日\n, s.name,s.age,s.tele,s.sex,s.b.year,s.b.month,s.b.day); //打印出张三,20,16273847436,男,2002年12月12日 return 0; }结构的重命名不重命名的话每次创建变量时候都要struct Stu s1struct Stu s2重命名的话创建变量的时候就不用加struct直接Stus s1,Stus s2//对类型进行重命名把Stu改成Stus typedef struct Stu{ …… }Stus; struct Stu{ …… }s1,s2,s3;//声明类型的同时定义变量s1,s2,s3 //这里的s1,s2,s3叫全局变量如果要封装一个打印结构体的函数的话选print2好一点因为函数传参的时候参数是需要压栈的如果传递一个结构体对象的时候结构体过于大参数压栈的系统开销较大所以会导致性能下降总之结构体传参的时候要传结构体的地址好一点struct Stu{ char name[20]; int age; char tele[20]; char sex[20]; }; void print1(struct Stu temp){ printf(%s %d %s %s\n,temp.name,temp.age,temp.tele,temp.sex); } void print2(struct Stu *temp){ printf(%s %d %s %s\n,(*temp).name,(*temp).age,(*temp).tele,(*temp).sex); //上边这一行就等于这一行printf(%s %d %s %s\n,temp-name, temp-age, temp-tele, temp-sex); } int main(){ struct Stu s{张三,20,16273847436,男}; print1(s);//传结构体 print2(s);//传地址 return 0; }匿名结构体struct {char name[20];int age;char tele[20];char sex[20];}s;这个叫匿名结构体变量声明匿名结构体的时候必须在后边紧跟着创建结构体变量例如s结构体的内存对齐struct S1{ char c1; int a; char c2; }; struct S2{ char c1; char c2; int a; }; int main(){ struct S1 s1{0}; struct S2 s2{0}; printf(%d\n,sizeof(s1));//12 printf(%d\n,sizeof(s2));//8 return 0; }