前言:
室友一把王者荣耀的时间,你可以重新认识一下C语言的结构体,或者彻底搞懂C结构体!你悄悄努力!认真发光!然后惊艳!
1、结构体的声明
1.1 结构的基础知识
结构是一些值的集合,这些值称为成员变量。与数组不同的是结构体的每个成员可以是不同类型的变量。
1.2结构体的声明
我们来描述一个小学生:
struct stu
{
char name[20];//小学生名字
int age;//年龄
double score;//考试分数
};//分号不能少
1.3 结构成员的类型
结构的成员可以是标量、数组、指针,甚至是可以嵌套其他结构体。
1.4 结构体变量的定义和初始化
有了结构体类型以后,那如何定义变量,其实很简单。
struct stu
{
char name[20];//小学生名字
int age;//年龄
double score;//考试分数
}p1;//声明结构体的同时,定义变量p1
struct stu p2;定义结构体变量p2
2. 结构体成员的访问
如何实现对结构体内部成员的访问呢,我们是通过(.)运算符来实现的.
#include <stdio.h>
struct stu
{
char name[20];
int age;
double score;
};
int main()
{
struct stu s={"张三",20,89.5};
printf("%s %d %lf\n",s.name,s.age,s.score);
struct stu * p = &s;
printf("%s %d %lf\n",(*p).name,(*p).age,(*p).score);
printf("%s %d %lf\n",p->name,p->age,p->score);
return 0;
}
1.我们可以直接通过(.)运算符来实现对结构体成员的访问
struct stu s={"张三",20,89.5};
printf("%s %d %lf\n",s.name,s.age,s.score);
2.我们可以通过使用指针p使其指向s的地址,而做到间接访问,不过这样会显得更加麻烦,一般不使用。
struct stu * p = &s;
printf("%s %d %lf\n",(*p).name,(*p).age,(*p).score);
3.我们可以通过使用 -> 操作符,使指针直接指向结构体内部成员。
struct stu * p = &s;
printf("%s %d %lf\n",p->name,p->age,p->score);
3. 结构体传参
结构体传参可以分为函数传参和结构体地址传参。】
函数传参的时候,参数是需要压栈的。
如果传递一个结构体对象的时候,结构体过大,参数压栈的的系统开销比较大,所以会导致性能的下降。性价比较低
结论:结构体传参的时候,要传结构体的地址