目录
什么是结构体?
<类似于mysql建表的结构,对一个复杂对象进行描述>
结构是一些值的集合,这些值称为成员变量。结构的每个成员可以是不同类型的变量
结构的成员可以是标量、数组、指针,甚至是其他结构体。
语法结构:
struct tag
{
member-list;
}variable-list;
//struct 结构体标志 tag 结构体标签
//member-list 成员列表(变量)
//variable-list 变量列表
//结构体类型的声明
struct stu
{
char name[20];
int age;
char sex[8];
float score;
}s1,s2,s3; //s1 s2 s3是通过stu这个类型创建的变量,可以写一个,也可以一个都不写
//s1 s2 s3是全局变量
int main()
{
return 0;
}
int main()
{
//s4 s5是局部变量
//struct stu才是结构体类型,不能随便省略
struct stu s4;
struct stu s5;
return 0;
}
我可以使用typedef类型重命名
当然 我还有另一种写法 ,也是没有任何问题:
如何创建变量:
如何初始化?
如何访问?
结构体访问操作符:. 和 →
<结构体变量.结构体成员>
<结构体指针→结构体成员>
但一般不这样写,这样就复制成了两份。我们一般传地址:
同时我还可以进行赋值:
整数我可以直接改,但是数组,不能。数组是个地址,要使用<string.h>strcpy函数:
这个✳是什么,其实没有多大的用,只是建议使用
结构体传参:
struct S
{
int data[1000];
int num;
};
struct S s = { {1,2,3,4}, 1000 };
//结构体传参
void print1(struct S s)
{
printf("%d\n", s.num);
}
//结构体地址传参
void print2(struct S* ps)
{
printf("%d\n", ps->num);
}
int main()
{
print1(s); //传结构体
print2(&s); //传地址
return 0;
}
print1和print2,哪个好?
具体看后期<函数栈帧的创建和销毁讲解>