目录
一、结构体的声明
1.结构
结构是一些值的集合,这些值称为成员变量。结构的每个成员可以是不同类型的变量。
与数组对比:数组是一组相同类型元素的集合。
2.结构的声明
struct tag //struct是结构关键字
{
member - list; //成员变量
}variable-list;
3.结构成员的类型
结构的成员可以是标量、数组、指针、甚至可以是其他结构体。
4.结构体变量的定义和初始化
//例如描述一个学生
struct stu
{
char name[20];//姓名
int age;//年龄
char id[20];//学号
}s1,s2;//定义结构体变量s1,s2
struct point
{
struct stu s;
int x;
int y;
};
int main()
{
//用stu这个类型创建一个学生变量
struct stu a;//定义结构体变量a
struct stu s = { "zhangsan",20,20221314 };//初始化
struct point i = { { "zhangsan",20,20221314 },12,13 };//结构体嵌套初始化
return 0;
}
二、结构体成员的访问
结构成员访问操作符:
. 结构体.成员名
使用点操作符(.)访问结构变量的成员。
-> 结构体->成员名(应用于指针)
使用结构体指针访问结构变量的成员。
三、结构体传参
struct stu
{
char name[20];//姓名
int age;//年龄
};
void printfl(struct stu s)
{
printf("%s %d\n", s.name, s.age);
}
void printf2(struct stu* s)
{
printf("%s %d\n", s->name, s->age);
}
int main()
{
struct stu s = { "lisi",18};
printfl(s);//传值调用
printf2(&s);//传址调用
return 0;
}
输出:lisi 18
lisi 18
printf1和printf2函数,哪个更好呢?
printf2。
原因:函数传参的时候,参数是需要压栈的。如果传递一个结构体对象的时候,结构体过大,参数压栈的系统开销就比较大,所有会导致性能的下降。
结论:结构体传参的时候,要传结构体的地址。