zoukankan      html  css  js  c++  java
  • 结构体和共同体

    结构体
    定义多个不同类型的成员变量组合在一起,以实现复杂的数据结构。
    格式:
     
    struct [标签名]  { 
        类型    变量名;
        类型    变量名;
        ...
    } [ 变量1={初始化},  变量2 ...];
     
    或者:
     
    typedef struct{
     
        类型    变量名;
        类型    变量名;
        ...
    } [标签名];
     
    示例:
     
    struct Books {
     
       int   id;
       char  title[50];
       char  author[50];
       
    } book;
     
     
    当两个结构体互相包含,则需要对其中一个结构体进行声明:
     
    //声明
    struct B; 
     
    //结构体A指向结构体B
    struct A{
        struct B *partner;
    };
     
    struct B{
        struct A *partner;
    };
     
     
    位域
    有些信息在存储时,并不需要占用一个完整数据空间,而只需占几个或一个二进制位。所谓"位域"是把字节中的二进位划分为几个不同的区域,并说明每个区域的位数。
    格式:整型  变量名 : 宽度
     
    struct {
        int  a:8;
        unsigned  b:16; //等同于 unsigned int
        int  :4;    // 空域,会空出4位的空间
        signed char  c;//char 保存的也是整数
        
    } code;
     
    值得注意的是宽度表示是的所占二进制位,不能超过它自身的类型。
    如: char 占1个字节,也就是8位,所以宽度不能超过8,即: char a:9 会报错。
    如: int 占4个字节,也就是32位,所以宽度不能超过32,即: int a:33 会报错。
     
    整个结构体所占内存大小是最大的那数据类型的整数倍.
    {
    int  a:32;
    char b:8;
    }
    共计 32 + 8 = 40 / 8 = 5字节,而成员变量中占用空间最大的是int型,一个int占4个字节,而4个字节存不下,得再扩展一个int空间,所以就占8个字节了。可以通过 sizeof(变量) 去验证结果;
     
    共用体
    定义多个不同类型的成员变量共用相同的内存空间,而内存空间只能轮流使用,内存空间大小取决于最大的那个成员变量。
     
    union [标签名] {
     
        类型    变量名;
        类型    变量名;
        ...
        
    } [变量1, 变量2 ...];
     
    示例:
    union Student {
     
       char  name[10];
       int age;
       float weight;
       
    } boy;
     
     
    int main( ) {
     
       //正确使用
       boy.name = "Tom";
        printf( "男孩名字: %s 
    ", boy.name);
        
       boy.age = 20;
       printf( "男孩年龄: %d 
    ", boy.age);
       
       boy.weight = 64.5
       printf( "男孩体重: %f 
    ", boy.weight);
     
       //错误使用
       union Student girl; 
       girl.name = "Ailsa";
       girl.age = 20;
       girl.weight = 46.5
       
       printf( "女孩: %s  %d  %f 
    ", girl.name, girl.age, girl.weight);
      
    }
  • 相关阅读:
    宿主机( win 7 系统) ping 虚拟机VMware( cent os 6.6 ) 出现“请求超时”或者“无法访问目标主机”的解决方法
    Java实现 LeetCode 23 合并K个排序链表
    Java实现 LeetCode 23 合并K个排序链表
    Java实现 LeetCode 23 合并K个排序链表
    Java实现 LeetCode 22 括号生成
    Java实现 LeetCode 22 括号生成
    Java实现 LeetCode 22 括号生成
    Java实现 LeetCode 21 合并两个有序链表
    Java实现 LeetCode 21 合并两个有序链表
    Java实现 LeetCode 21 合并两个有序链表
  • 原文地址:https://www.cnblogs.com/zbseoag/p/10716436.html
Copyright © 2011-2022 走看看