结构体与链表
1、 结构体的概念
A)数组可以定义变量集合,所有的元素都只能有一个类型
B)结构体也可以定义变量集合,任何成员都可以是不同类型
C)通常数组内部变量叫做元素,结构体内部变量叫成员
D)使用结构体定义的变量也叫对象
2、 定义结构体: //注意结构体结尾处要有“;”
Struct [结构体名]
{
类型标识符成员名: //都是普通变量
类型标识符成员名
。。。。。。。。。。。
};
A) 方括号代表可以不指定名字
B) 分号错误:
Error C 2628:’SInfo’ followed by ‘int ’ is illeagel
3、 定义结构体要注意:
A) 一般定义在函数外,让所有的函数都能访问
B) 往往定义在.h头文件中,可以被多个cpp文件包含(并使用)
C) 变量无法在.h头文件中定义,最多可以使用extern把cpp中的变量声明到.h中
D) 结构体定义形成了创建结构体变量的模板,它是一个类型而不是一个变量
E) 结构体只用定义了对象(结构体变量)
F) 结构体中的变量称为结构体元素或者结构体成员
4、 结构体之间的定义
A) 一个结构体可以包含另一个结构体对象作为成员变量
B) 结构体不能自己包含自己(求sizeof会出现镜中镜)
C) 本结构体的指针可以作为结构体成员
5、 结构体变量(对象-Objict)
A) 定义好了结构体之后,并没有申请内存空间
B) 结构体自身不是变量,而是一种类型
C) 相当于一个结构体就是一个模板,在定义变量时依据模板在内存上申请空间
6、 定义结构体对象
A) 最主要的定义结构体对象的方式,是使用结构体名或者别名来定义结构体对象(或者指针)
B) 可以在结构体尾部直接定义结构体对象,结构体指针变量
C) 没有名字的结构体只能在尾部定义变量
7、 结构体初始化
A) 使用大括号或者多层大括号
B) 结构体整体赋值:两个同类型的结构体对象之间的结构体赋值
①将所有的成员赋值一遍(最差的方法)
②memcpy可以将两个结构体赋值
③2个同类型的结构体对象直接用=赋值(=赋值在编译器内其实还是使用memcpy)
8、 结构体成员
A) 对于对象的成员变量的调用在对象后面跟.调用
例如:对象.成员变量 point.x
B) 早期使用(*对象指针)方式访问结构体成员,后来简化为 –>
例如:(*p).x
C) 对象的指针对成员变量的调用使用指针符号 ->
P -> x
9、 结构体做参数时:
A) 结构体作为参数时,复制了一个新的结构体对象(效率低)
int GetDayofYear(STime time)
B) 使用结构体指针
Int GetDayofYear(STime *time)
10、 结构体数组
A) 定义:定义结构体对象时加[]指定对象个数
B) 初始化和清零:使用一层或者多层大括号
例如:
SStudentstu[100] =
{
{1001,”张珊”,75,100}
{1002,”李四”,80,90}
}
C) 清零:
SStudent stu[100] = {0};
Memset{stu,0,sizefo(stu)};