------Java培训、Android培训、iOS培训、.Net培训、期待与您交流! -------
1 结构体:
作用:可以由多个不同类型的数据构成。
//定义结构体类型,类型为person:(此阶段不会分配存储空间)
struct person
{
变量; // 称为结构体变量或属性
}
//根据结构体类型person,定义结构体变量,变量名为p(此阶段分配存储空间)
struct person p={ }; // 赋值的时候只能在定义结构体的时候同时赋值
eg:错误写法
struct person p;
p={ };
2. 内存分析:
对齐算法:结构体所占用内存空间的大小,一定是结构体中最大成员所占用存储空间的倍数。
eg:
struct Student
{
int age; // 4个字节
char *name; // 8个字节
}stu;
结构体所占用的字节:16个字节(8的倍数);
内存分配:定义结构体类型时不会分配内存空间,只有当赋值的时候才能分配存储空间。
3.结构体类型不能够重复定义
定义结构体变量的三种方式:(从类型和变量进行考虑)
(1)先定义类型(相当于int、double等),再定义变量
struct student
{
int age;
};
struct student stu;
(2) 定义类型的同时定义变量
struct student
{
int age;
} stu;
(3) 定义类型的同时定义变量,但是省略类型名称
struct
{
int age;
} 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.结构体嵌套
概念:在结构体中调用结构体。
eg:
struct names
{
int ages;
int years;
}name;
struct Student
{
name *stuname; // 嵌套结构体name
int banji;
}stu;
8.枚举
关键词:enum 其余定义方法和结构体一样
作用:固定变量的取值范围。
注:枚举类型中定义的变量只能取枚举中的属性。
eg:
enum season
{
spring=1, // 如果不手工指定spring为1,则spring默认为0
summer,
};
enum season s= spring;//s只能取spring或summer (枚举值都是整形常量,从0开始,也可以进行手工指定)