目录
结构(也叫结构体),是一些值的集合,结构的每个成员可以是不同类型的变量。(用来描述复杂对象)
相比于数组,数组存放的是相同类型的元素
结构体类型的声明
struct tag{member-list;}variable-list;
举个例子:
struct Stu{char name[20]; //名字int age; //年龄char sex[5]; //性别} Stu; //注意:分号不能丢
结构成员的类型
结构的成员可以是标量、数组、指针,甚至是其他结构体
结构体初始化
运用实例:
#include<stdio.h>
struct stu
{
char name[20];
int age;
char sex[10];
float score;
};
int main()
{
struct stu s1 = { "li moumou",25,"nv",98.9f }; //初始化
struct stu s2 = { "liu moumou",23,"nan",99.9f }; //初始化
printf("%s %d %s %f\n", s1.name, s1.score);
printf("%s %d %s %f\n", s1.name, s1.score);
return 0;
}
通过这种方式,简化了许多,打印起来更加方便
还有一种初始化方式:结构体嵌套初始化,例如:
struct date{int year;int month;int day;}struct date={"2022","11","22"};sruct world cup{
struct date;char country[2];}struct world cup = {{2022,11,22} argentuna, Saudi arabia }; // 结构体嵌套初始化
结构体成员的访问
1.结构体变量访问成员 ,是通过点操作符(.)访问的。点操作符接受两个操作数
2.结构体指针访问指向变量的成员 ,看作指向一个结构体的指
1.printf("name = %s age = %d\n", (*ps).name, (*ps).age);2.printf("name = %s age = %d\n", ps->name, ps->age);
结构体传参
结构体传参的时候,要传结构体的地址。
struct S{int data[1000];int num;};struct S s = {{1,2,3,4}, 1000};//结构体传参void print1(struct S s){printf("%d\n", s.num);}//结构体地址传参void print2(struct S* ps){printf("%d\n", ps->num);}int main(){print1(s); //传结构体print2(&s); //传地址return 0;}
首选print2函数,函数传参的时候,参数是需要压栈的。
如果传递一个结构体对象的时候,结构体过大,参数压栈的的系统开销比较大,所以会导致性能的
下降。