结构体:由许多数据项组成,可以是不同类型的。
结构体声明:struct+结构体名(自己命名)+{ 不同类型数据项 };如果在声明的时候将变量名放在分号前面如(struct user{ int id; char name[10] }test;),此时的test为全局变量。
typedef:对结构体进行重命名,重命名完可以直接使用,相当于一个自己定义的新数据类型。
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
地址:和数组一样,结构体在内存空间的地址是连续的。
初始化:按属性一一赋值,部分初始化必须按顺序。
赋值:赋值的时候不能在声明中赋值,因为声明的时候还未分配空间,定义变量的时候才分配空间。
结构体访问:访问的时候用变量名+.+数据成员名字。
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
内存对齐原则:占内存小的数据类型往前放,和最大数据类型的内存对齐,一般以4个字节为单位。
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
内存拷贝:memcpy(目的地址,拷贝地址,拷贝空间)
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
结构体嵌套:可以嵌套别的结构体,可以嵌套本身的指针,但是不能嵌套本身(因为无法计算内存空间)
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
数据传递:结构体变量可以作为函数参数或者返回值,是按值传递,互不影响。
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
结构体数组:保存一个用户信息用结构体变量,同时保存多个用户信息用结构体数组。结构体数组和数组一样,数组名代表地址。
结构体数组初始化,单个结构体访问,以及结构体数组全部访问如下图所示: