twater000 2020-04-14
结构体
struct 结构体名称 { 结构体成员1; 结构体成员2; ...... } 变量名; //访问结构体成员:‘.’(点号运算符);如:book.title就是引用book结构体的title成员; //初始化结构体:struct Book book={"书名" , "作者",20};这种方法参数要与结构定义的成员一一对应;
struct Book book={ .price=20 };// 指定初始化元素; //结构体存储方式:结构体存储时用到对齐化处理,导致内存浪费; //如:3个变量类型:char,int,char(每个定义的结构占用12个字节,第一个char和第三个char与int内存对齐都用4个字节) // 3个变量类型:char,char,int(每个定义的结构占用8个字节,第一个char和第二个char合起来与int对应占用4字节)
**********了解**********
结构体数组:struct 结构体名称 数组名[长度];
数组名是向数组第一个元素的地址(不为指针),所以数组名可以直接赋值给指针;
结构体指针:结构体的变量名不是结构体的地址;所以需要取地址;(struct Book *pt=&book;)
结构体指针访问结构体:1、先对指针解引用,然后用‘.’正常访问结构体成员【 (*pt).price 注:‘.‘ 优先级高于 ‘*‘ 】
注:一个结构体是可以直接赋值给另一个结构体的;即:book1=book2;(前提是两个结构体的类型必须相同)所以结构体变量就可以作为参数返回值进行传递;由于结构体所占内存比较大会影响程序效率,所以一般不会直接传递结构体,而是传递结构体指针;
传值时可以直接传结构体的地址过去:如:fun(&book);
动态的申请结构体:使用 malloc 函数为结构体分配存储空间;
struct Book book=( struct Book * )malloc ( sizeof( struct Book));