/*结构体 : 保存一组类型不同的数据;    定义格式 :         1,定义结构体类型后,再定义结构体变量 :             struct attr_type_name {attr_type attr_name;......};struct struct_name struct_var_name;        2,定义结构体类型的同时,定义结构体变量 :            struct attr_type_name {attr_type attr_name;......}struct_var_name;    //结构体类型名称可省略不写,但这样的结构体类型是一次性的;    初始化 :        1,定义结构体类型的同时,定义结构体变量,并进行初始化 :            struct attr_type_name {attr_type attr_name;......}struct_var_name = {.atrr_name = attr_value,.....};        2,定义结构体类型后,再定义结构体变量并进行初始化 :            struct attr_type_name {attr_type attr_name;......};struct struct_name struct_var_name = {.atrr_name = attr_value,.....};        3,定义结构体类型后,再定义结构体变量,之后在进行初始化 :            struct attr_type_name {attr_type attr_name;......};struct struct_name struct_var_name;struct_var.atrr.name = attr_value;     结构体在内存中的存储细节 : 与数组类似,不同的是在定义结构体类型时,并不会分配内存空间,只有在定义结构体变量时,才会分配内存空间;     结构体变量地址 : 为结构体变量第0个属性的地址,并没有保存在结构体变量名称中;     结构体变量在内存中的实际存储原则 :          原则 : 按照结构体中占用内存最大的属性占用的内存的倍数为结构体变量分配内存;         也即会按照占用内存最大的属性占用的内存为每一个属性分配内存,并查看其剩余内存是否足够容纳下一个属性,如果足够,则直接装入下一个属性,如果不够,重新分配一个最大内存,          装入该属性,至于上一个属性的剩余内存仍属于该结构体变量,但至此将其空置不在使用;     结构体类型或变量的作用域 : 自定义位置起至return或"}"结束     //注 : 局部变量在不同作用域内,可同名;全局变量作用域为自定义位置起至文件末尾;     指向结构体变量的指针 :         定义格式 : struct struct_type_name *var_name;         //注 : "."的运算级要高于"*"     通过指向结构体的指针访问结构体变量的另类方法 : 指向结构体变量的指针 -> 属性;     结构体数组 :          定义格式 : struct struct_type_name 数组名称[元素个数];     结构体嵌套 : 结构体中嵌套一个结构体;     结构体和函数 : 当把结构体变量作为实参传值给形参时,是进行值传递,函数内部修改结构体变量对实参没有影响;     */