C语言(结构体和共同体)

twater000 2020-04-14

结构体

  • 结构体:主要用来组织不同类型的数据(注:结尾有分号)
  • 结构体声明只是进行一个框架的描绘,不会直接在内存中分配空间,直到定义时才会分配空间
  • 结构体声明:在结束的分号前加一个变量,相当于声明完这个结构体之后直接定义一个这种结构的变量
  • 成员选择运算符(与 ‘.‘ 同属于第一优先级):‘->‘   结构体指针->成员名【 pt->price 】
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));

相关推荐