C语言第六节 结构体
1、结构体定义
• 结构体 也是一种构造数据类型,之前我们还学过的构造数据类型还有 枚举和数组;
• 结构体和数组很像,都是聚合变量,都可以存放一组数据,但是数组只能存放相同数据类型的数据,而结构体可以存放不同数据类型的数据,并且数组中数据称为 元素,结构体中数据称为 成员。
• 结构体的定义:
• struct 结构体名 {
类型说明符 成员名;
......
};
2、定义结构体的关键struct
三种定义形式:
1> 先定义结构体类型,再定义结构体变量;
struct student{
int number; //学号
char name[20]; //姓名
char gender; //性别
int age; //年龄
float score; //成绩
};
struct student stu = {"laowang", 'm', 25, 59.5};
//变量名是 stu ;类型名是 struct student ;
2> 在定义结构体类型时,直接声明结构体变量;
struct teacher{
int number; //工号
char name[20]; //姓名
char gender; //性别
int age; //年龄
char position[20]; //职务
float salary; //薪水
}iOSTeacher = {12001, "chenqingyuan", 28, 'm', "jiangshi", 100};
3> 匿名结构体,省略结构体名称,并且在定义结构体时,声明结构体变量;
struct {
char brand[20]; //品牌
float price; //价格
float volumn; //容量
float weight; //重量
}cup = {"fuguang", 10.0, 500, 100};
*/
3、typedef重定义
• 关键字typedef
typedef <#type#> <#name#>
• type是原有类型, name是新类型;
4、访问结构体成员
• 访问结构体成员使用 ‘.’ 操作符,可以认为 ‘.’ 就是 “的” 的意思;
• 如果想要修改字符串(姓名、品牌、类型等等)不能直接赋值,需要使用字符串的拷贝函数 strcpy;
5、结构体内存占用
1> 先确定最大成员所占用的字节大小。以此为单位依次分配内存
2> 每一个成员相对于首地址的偏移量,必须能不当前成员所占字节大小整除
3> 结构体占用内存必须是最大成员所占字节的整数倍
6、结构体嵌套
既结构体中的成员也是结构体。
7、结构体数组
数组不能赋值,但是结构体可以直接赋值,所以我们可以将数组放到结构体中当作成员,来间接完成赋值。