结构体、联合、枚举

来源:互联网 发布:图标大全软件 编辑:程序博客网 时间:2024/05/16 13:05

为了让一个存储区能记录多个相关数字,就需要制作新的数据类型.


结构体:

        结构体可以用来创建新的数据类型

        用结构体创建的数据类型需要先声明,然后才能使用

        声明结构体类型的时候,需要使用struct关键字

        结构体声明不能分配内存,它仅仅描述了结构体存储区的格式

        结构体声明语句可以写在头文件里

        把结构体作为数据类型声明变量,这种变量叫结构体变量。它们会真正分配内存,它们才能记录数字

#include <stdio.h>

typedef struct 

{ //不会分配内存,只是描述了格式

  int age;

  float height;

  char name[10];

} person;

int main()

{

  person prs1= {20,1.72,"abc"};//分配内存

 return 0;

}

      

         typedef关键字可以给数据类型起别名

         结构体存储区通常不会作为整体使用,一次只会使用其中某个小存储区


         两个函数之间传递结构体数据的时候,不应该使用结构体类型的存储区,这个时候应该采用结构体指针类型的存储区

         如果希望从被调用函数向调用函数传递结构体内容,就可以使用结构体指针类型的存储区存放返回值

  

         一个存储区的大小必须是它自身大小的整数倍(double类型存储区的大小是4的整数倍)

         结构体内部的子存储区通常需要遵守数据对齐的规则

          数据对齐可能造成结构体内部子存储区之间的空隙

   

         #include <stdio.h>

         typedef struct

         {

             char ch;//1个字节+浪费3个字节

              int num;//4个字节

         } stru1;

        int main()

        {

             printf("sizeof(stru1)=%d\n", sizeof(stru1));//8

             return 0;

        }

     

枚举类型:

        枚举类型中包含有限个整数,每个整数可以用一个名字表示

        声明枚举类型的时候需要使用enum关键字

        枚举类型中第一个名称对应的整数是0,向后依次递增


       #include <stdio.h>

       int  main()

      {

          enum season {CHUN,XIA,QIU,DONG};

          printf("QIU=%d\n",QIU);//2

     }



联合:

       声明联合的时候,需要使用union关键字

       联合里也包含多个子存储区,只不过所有子存储区的地址都一样

      对任何一个子存储区的修改会影响其它子存储区

      联合变量的大小是其中最大子存储区的大小

     #include <stdio.h>

     typedef union

    {

        char ch;

        int num;

    } un;

    int main()

   {

     un un1 = {0};

     printf("sizeof(un1)=%d\n",sizeof(un1));// 4

  }


0 0
原创粉丝点击