前言
我是在B站鹏哥C语言那自学的C,每篇博客相当于对自己上课内容的复习,希望自己在大学这段时间多写博客,做到至少一周两更,如果内容有勘误欢迎指正,大家一起加油。
一、结构体是什么?
C 数组允许定义可存储相同类型数据项的变量,结构体是 C 编程中另一种用户自定义的可用的数据类型,它允许您存储不同类型的数据,最后放在一个整体进行处理。
二、结构体的声明
struct tag
{
member-list;
}variable-list;
例如描述一个学生:
typedef struct stu
{
//成员变量
char name[20];//姓名
int age;//年龄
char sex[5];//性别
double id[20];//学号
};//一定要有分号
三、结构体变量的定义和初始化
struct point
{
int x;
int y;
}p1;//声明类型的同时定义变量p1
struct point p2;//定义结构体变量p2
//初始化:定义变量的同时赋值
struct point p3 = {x,y};
struct Node //
{
int data;
sturct point p; //定义结构体变量p
struct node* next; //结构体指针
}n1 = {10, {4,5},NULL};//结构体嵌套初始化
四、结构体成员的访问
结构体变量访问成员:结构变量的成员是通过点操作符(.)访问的。点操作符接受两个操作数。
struct stu
{
char name[20];
int age;
double score;
};//定义结构体
int main()
{
struct stu s ={"zhangsan", 20, 85};//结构体初始化
printf("1:%s %d %1f\n", s.name, s.age, s.score);//打印学生s的信息
return 0;
}
//输出结果是:
//1:zhangsan 20 85.000000
五、结构体传参
void print1(struct stu s)
{
printf("1:%s %d %1f\n", s.name, s.age, s.score);//传值
}
void print2(struct stu* ps)
{
printf("2:%s %d %1f\n", ps->name, ps->age, ps->score);//传址
}
int main()
{
struct stu s ={"zhangsan", 20, 85};
print1(s);//传值调用
print2(&s);//传址调用
return 0;
}
传参首选print2 ,值传递需要开辟一块新的空间来储存值。函数传参时,参数需要压栈,如果传递一个结构体对象时,结构体过大,参数压栈时系统开销比较大,导致性能下降。所以要在结构体传参时,要传结构体的地址。
*函数的压栈:
栈是一种数据结构,先进的后出,后进的先出