结构体
什么是结构体?
答:若干个相同或者不同类型的数据组成的新的类型
定义格式:
struct 结构体名{
};
结构体变量
结构体变量特点:
一个复合类型,具备结构体的特性
struct Stu{
}stu1,stu2;
//匿名结构体
struct{
}s1; //
//先定义结构体,后定义变量
struct Stu stu3;
结构体变量中成员的访问方法
结构变量名.成员名
点语法
boy1.num
boy2.sex
boy1.birthday.month
初始化结构体变量
初始化的时候,注意成员的顺序
1)定义的同时进行初始化
struct Stu{
}stu1={23,"sss","xxx"};
2)定义结构体变量的同时初始化
struct Stu{
}; //以上仅仅只是定义了结构体类型,还没有定义结构体变量
//定义结构体变量
struct Stu stu2 = {23,"sss","xxx"};
3)定义结构体类型同时定义结构体变量后初始化
struct Stu{
}stu3;
stu3 = {23,"sss","xxx"};
1.连续初始化
stu3 = (struct Stu){23,"sss","xxx"}; //正确
2.逐个初始化
stu3.age = 1;
strcpy(stu3.name,"xxx");
stu3.name2 = "xxx";
区分一个细节:
struct Stu{
}stu1;
stu1.name = "xxx" ;
strcpy(stu1.name,"xxx");
stu1.name2 = "xxx"
//定义同时进行初始化
//部分初始化
struct Stu{
};
方式一:struct Stu boy1={.name="weige"};
方式二:struct Stu boy1;
boy1.age = 10;
结构体的数组
定义:由相同类型的结构体变量组成的有序的集合。
定义格式:
1) 定义结构体的同时定义结构体数组
struct Car{
}cars[5];
2) 使用匿名结构体定义数组
struct {
}cars[5];
3)先定义结构体类型,再定义结构体数组
struct Car{
};
struct Car cars[5];
初始化:
1) 定义结构体数组的同时进行初始化
struct Car{
}cars[2]={{2,50},{80,300}};
2)方式二
struct Car{
};
struct Car cars[2]={{2,50},{80,300}};
3) 匿名
struct {
}cars[2]={{2,50},{80,300}};
4)先定义结构体数组,后初始化
struct Car{
}cars[3];
cars[0].lunzi = 4;
cars[0].speed = 200;
cars[0].name="xxxx";
通过数组角标整体去初始化 cars[1]=(struct Car){6,100};
结构体指针
定义:指向结构体的指针
格式:结构体类型 * 结构体指针变量名;
struct Student stu1;
struct Student *pstu;
pstu = &stu1;
作用:可以间接访问结构体变量中保存的成员变量值
(*pstu).name
(*pstu).sno 新的访问方法
pstu->name
等价于 (*pstu).name
结构体作用域
跟变量作用域用法一样
结构体存储空间
结构体在内存中占用的存储空间是 所有元素占用空间之和(考虑对齐)
1.逐个元素对齐(下个元素与之前所有元素之和对齐)
2.整体对齐(最后的和能单独整除所有元素)-->
结构体基本用法:
#include
int main(){
}
#include
int add();
int main(){
}
struct Person{
};
struct Person per1={"heima",19,8};
int add(){
}