主要内容:结构体(很重要,掌握)
一、结构体的声明
结构体是一种比较灵活的数据类型,与oc药学的类很相似
结构体是一种自己定义的数据类型示例
struct 结构体名struct student // 定义一个学生类型
{{
类型说明符 成员名;char name;// 姓名变量
... ...char sex;// 性别变量
类型说明符 成员名;float core;// 分数变量
};}
由结构体类型修饰的变量,叫结构体变量
定义:struct 结构体名 变量名 = { 初值 };
示例:struct student stu = { " 张平辉 ", ' m ', 98.5 };
想访问结构体成员:结构体变量名 . 成员变量名
如:stu . name / / 输出得到得到姓名
注意:结构体成员变量与普通变量一样,可直接赋值
示例:
student stu2 = {};
stu2 = stu1;/ / 把结构体变量stu1的值赋值给stu2
可以通过把数组放在结构体内实现数组的直接赋值(数组不可以直接赋值)
二、匿名结构体
为现有的类型创建一个类型别名(通俗的讲就是为现有类型创建一个其它的名字)
语法:typedef 原类型名 新类型名
示例:
typedef int Integer;
Integer a = 10;/ / 等同于 int a = 10;
使用typedef定义结构体
struct student {typedef struct {
char name[20] ;等同于 char name[20] ;
char sex;char sex;
float score;float score;
};} Student
typedef struct student Student;Student stu1 = {"张平辉", 'm' 98};
Student stu1 = {"张平辉", 'm' 98};Student stu2 = {"赵文龙", 'm',99};
Student stu2 = {"赵文龙", 'm',99};
结构体数组
将多个结构体变量放到数组中,构成结构体数组
Student stu [ ] = {stu1, stu2};
通过下标访问结构体数组
stu[1].name
三、结构体嵌套
结构体的成员依然可以是结构体
示例:
typedef struct date {
int year;
int month;
int day;
} MyDate;
struct student {
char name[];
MyDate birthday;
} / / 访问:stu1.birthday.year
结构体和数组的相互嵌套可以实现比较复杂的数据结构
四、结构体内存占用
以最大成员变量类型所占空间为分配单位,按结构体成员声明顺序自上而下分配
分配空间不足时以存储成员变量时,分配新的空间