这篇文章主要是带大家了解结构体,不会讲解的很深入
每日一图:
本篇内容:
目录
- 1.结构体的声明
- 1.1结构的基础知识
- 1.2结构的声明
- 1.3结构成员的类型
- 1.4结构体变量的定义和初始化
- 2.结构体成员的访问和结构体传参
1.结构体的声明
1.1结构的基础知识
结构是一些值的集合,这些值称为成员变量。结构的每个成员可以是 不同类型的变量。
结构体可以用来描述复杂对象。
1.2结构的声明
struct tag
{
member-list;
}variable-list;
struct Stu
{
//结构体成员
char name[20];//名字
int age;//年龄
char sex[10];//性别
float score;//成绩
}s4,s5; //s4,s5是结构体变量——全局变量
struct Stu s6; //s6是结构体变量——全局变量
int main()
{
struct Stu s1, s2, s3; //s1,s2,s3是结构体变量——局部变量
return 0;
}
1.3结构成员的类型
结构的成员可以是标量、数组、指针,甚至是其他结构体。
1.4结构体变量的定义和初始化
有了结构体类型,那如何定义变量,其实很简单。
struct Stu
{
//结构体成员
char name[20];//名字
int age;//年龄
char sex[10];//性别
float score;//成绩
};
int main()
{
//初始化:定义变量的同时赋初值。
struct Stu s1 = { "十一",18,"男",90.5f};
printf("%s %d %s %.1f\n", s1.name, s1.age, s1.sex, s1.score);//结构体打印
return 0;
}
运行效果:
结构体中也可以出现结构体。
struct S
{
int a;
char d;
};
struct P
{
double c;
struct S s;
float f;
};
int main()
{
struct P p = { 5.5,{100,'b'},3.14f };
printf("%lf %d %c %f\n", p.c, p.s.a, p.s.d, p.f);
return 0;
}
运行效果:
2.结构体成员的访问和结构体传参
结构体变量访问成员
结构变量的成员是通过点操作符(.)访问的。点操作符接受两个操作数。
也可以通过结构体指针访问指向变量的成员
有时候我们得到的不是一个结构体变量,而是指向一个结构体的指针。
如下:
struct S
{
int a;
char d;
};
struct P
{
double c;
struct S s;
float f;
};
void Print1(struct P sp)
{
//结构体变量.成员
printf("%lf %d %c %f\n", sp.c, sp.s.a, sp.s.d, sp.f);
}
void Print2(struct P* p1)
{
//结构体指针->成员
printf("%lf %d %c %f\n", p1->c, p1->s.a, p1->s.d, p1->f);
//使用结构体指针访问指向对象的成员
}
int main()
{
struct P p = { 5.5,{100,'b'},3.14f };
//结构体传参
Print1(p);//传值调用
Print2(&p);//传址调用
return 0;
}
运行效果:
上面的 print1 和 print2 函数哪个好些?
答案是:首选print2函数。
原因:
函数传参的时候,参数是需要压栈的。
如果传递一个结构体对象的时候,结构体过大,参数压栈的的系统开销比较大,所以会导致性能的下降。
结论:
结构体传参的时候,要传结构体的地址。
以上就是本篇文章的全部内容了,希望大家能有所收获。