目录
导语:
思维导图:
1、结构体的声明
1.1 结构的基础知识
1.2 结构的声明
1.3 结构成员的类型
1.4 结构体变量的定义和初始化
2、结构成员访问
3.结构体传参
结语:
本篇文章讲解结构体的基础知识,对结构体有一个基本的认识,能看懂并会使用结构体。
结构是一些值的集合,这些值称为成员变量。结构的每个成员可以是不同类型的变量。
之前我们学过一种集合的概念——数组,数组就是一组相同元素的集合。而我们现在了解的是一些值的集合,结构的成员可以是不同类型。
那为什么会有结构这个东西呢?原因很简单,我们生活中有很多复杂对象(如图),用一个类型变量无法描述清楚,所以造出来结构来描述我们这些复杂对象。
结构的语法声明:
struct Stu
{
//结构成员
char gender[10];
int age;
char name[20];
float grade;
};
结构的成员可以是标量、数组、指针,甚至是其他结构体。
这是一个类型,就和char、int、flaot一样,只是这里面可以包含各种类型,可以理解为结构体是“综合型选手”。
结构体变量的定义:
struct Stu
{
//结构成员
char gender[10];
int age;
char name[20];
float grade;
}s3,s4;//s3和s4也是结构体变量 -- 全局变量
int main()
{
struct Stu s1,s2;//s1和s2是结构体变量 --局部变量
return 0;
}
结构体变量的初始化:
struct Stu
{
char gender[10];
int age;
char name[20];
float grade;
}s3,s4;
struct P
{
char address[50];
struct Stu s5;//结构体嵌套
int class;
};
int main()
{
struct Stu s1 = { "男",22,"李华",98.2f };//初始化
struct P s2 = { "武汉",{"女",21,"珍妮",78.4f},108 };//嵌套访问
return 0;
}
结构变量的成员是通过点操作符(.)访问的,点操作符接收两个操作数。
代码示例:
struct Stu
{
char gender[10];
int age;
char name[20];
float grade;
}s3,s4;
struct P
{
char address[50];
struct Stu s5;//结构体嵌套
int class;
};
int main()
{
struct Stu s1 = { "男",22,"李华",98.2f };//初始化
struct P s2 = { "武汉",{"女",21,"珍妮",78.4f},108 };//嵌套访问
printf("%s %d %s %.2f\n", s1.gender, s1.age, s1.name, s1.grade);
printf("%s %s %d %s %.2f %d\n", s2.address,s2.s5.gender,s2.s5.age,s2.s5.name,s2.s5.grade,s2.class);//嵌套访问
return 0;
}
另外,也可也通过指针访问变量的成员
struct Stu
{
char gender[10];
int age;
char name[20];
float grade;
}s3,s4;
void Print1(struct Stu s)
{
//结构体变量.成员
printf("%s %d %s %.2f\n", s.gender, s.age, s.name, s.grade);
}
void Print2(struct Stu* s)
{
printf("%s %d %s %.2f\n", (* s).gender, (*s).age, (*s).name, (*s).grade);
//结构体指针->成员
printf("%s %d %s %.2f\n", s->gender, s->age, s->name, s->grade);
}
int main()
{
struct Stu s1 = { "男",22,"李华",98.2f };//初始化
Print1(s1);//传值调用
Print2(&s1);//传址调用
return 0;
}
刚才我们通过传值调用和传址调用两种形式访问结构体成员,那么哪种方法更好呢?
在我看来,传址调用肯定是好一点的。
传值调用参数会压栈,重新开辟内存,对数据进行存储,另外在传递的时候也会消耗时间,如果结构体过大,那传参的压力比较大,会导致性能的下降;
传址的话,把地址传给函数,一个地址的字节为4个字节或8个字节,这时候传参的压力就会小一点。
本次讲解的内容较为基础,所需掌握的是了解什么是结构体,如何访问结构体成员。要知道结构体也是一个类型(自己创建的),里面包含了各个类型,可以用来描述较复杂的对象。
好了,本次分享就到这里,如果对大家有帮助的话,不妨点个赞支持一下,蟹蟹,再见!