1 结构体:
作用:可以由多个不同类型的数据构成。
(此阶段不会分配存储空间
1 struct person
2 {
3 变量; // 称为结构体变量或属性
4 }
5 //根据结构体类型person,定义结构体变量,变量名为p(此阶段分配存储空间)
6 struct person p={ }; // 赋值的时候只能在定义结构体的时候同时赋值
错误写法
struct person p;
p={ };
2. 内存分析:
一定是结构体中最大成员所占用存储空间的倍数。
1 struct Student
2 {
3 int age; // 4个字节
4 char *name; // 8个字节
5 }stu;
结构体所占用的字节:16个字节(8的倍数);
内存分配:定义结构体类型时不会分配内存空间,只有当赋值的时候才能分配存储空间。
3.结构体类型不能够重复定义
定义结构体变量的三种方式:(从类型和变量进行考虑)
(1)先定义类型(相当于int、double等),再定义变量
1 struct student
2 {
3 int age;
4 };
5 struct student stu;
(2) 定义类型的同时定义变量
1 struct student
2 {
3 int age;
4 } stu;
(3) 定义类型的同时定义变量,但是省略类型名称
1 struct
2 {
3 int age;
4 } stu;
4.作用域
定义在函数内部:从定义那一行开始,到函数或代码块结束。(跟局部变量一样)
定义在函数外部:从定义那一行开始,到程序结尾。(跟全局变量一样)
5.结构体数组(结构体中定义结构体):
struct student stu[3] = { { },{ },{ } } // 结构体数组中含有三个结构体
数组修改方式:
错误修改:stu[0]={ };
正确修改:stu[0].age=10;
6.指向结构体的指针
struct student *p;
p=&stu;
有三种方法访问结构体属性:
方法1:stu.age;
方法2:(*p).age;//代表指针访问结构体中的age属性
方法3: p->age;//代表指针访问结构体中的age属性 (最常用)
7.结构体嵌套
概念:在结构体中调用结构体。
1 struct names
2 {
3 int ages;
4 int years;
5 }name;
6 struct Student
7 {
8 name *stuname; // 嵌套结构体name
9 int banji;
10 stu;
8.枚举
关键词:enum 其余定义方法和结构体一样
作用:固定变量的取值范围。
注:枚举类型中定义的变量只能取枚举中的属性。
1 enum season
2 {
3 spring=1, // 如果不手工指定spring为1,则spring默认为0
4 summer,
5 };
6 enum season s= spring;//s只能取spring或summer (枚举值都是整形常量,从0开始,也可以进行手工指定)