共用体(联合)和结构体·

时间:2019-01-18
本文章向大家介绍共用体(联合)和结构体·,主要包括共用体(联合)和结构体·使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。

 

共用体 构造数据类型,也叫联合体

用途:使几个不同类型的变量共占一段内存(相互覆盖) 当数据项使用两种或更多格式可节省空间,假设管理的是一个商品目录,有些商品是整数,有些商品是字符,此时

结构体是一种构造数据类型

用途:把不同类型的数据组合成一个整体——-自定义数据类型

struct widget{

    char brand[20];
    int type;
    union id{

    long id_num;
    char id_char[20];

    }id_val;
}
 widget prize;
 
if(prize.type == 1)
    cin>>prize.id_val.id_num;
else 
    cin>>prize.id_val.id_char;

结构体变量所占内存长度是各成员占的内存长度的总和。

共同体变量所占内存长度是各最长的成员占的内存长度。

共同体变量中起作用的成员是最后一次存放的成员,在存入新的成员后原有的成员失去了作用.

匿名共用体 没有名称,其成员将成为位于相同地址处的变量。被视为一个变量

struct widget{
    char brand[20];
    int type;
    union{
    long id_num;
    char id_char[20];
    };
 };

widget prize;

if(prize.type==1)
    cin>>prize.id_num;
else
    cin>>prize.id_char;

 

union myun  
{  
     struct { int x; int y; int z; }u;  
     int k;  
}a;  
int main()  
{  
     a.u.x =4;  
     a.u.y =5;  
     a.u.z =6;  
     a.k = 0;  
     printf("%d %d %d\n",a.u.x,a.u.y,a.u.z);  
     return 0;  
}  

union类型是共享内存的,以size最大的结构作为自己的大小,这样的话,myun这个结构就包含u这个结构体,而大小也等于u这个结构体的大小,在内存中的排列为声明的顺序x,y,z从低到高,然后赋值的时候,在内存中,就是x的位置放置4,y的位置放置5,z的位置放置6,现在对k赋值,对k的赋值因为是union,要共享内存,所以从union的首地址开始放置,首地址开始的位置其实是x的位置,这样原来内存中x的位置就被k所赋的值代替了,就变为0了,这个时候要进行打印,就直接看内存里就行了,x的位置也就是k的位置是0,而 y,z的位置的值没有改变,所以应该是0,5,6

C和C++之间结构体的深层区别

struct structA  
{  
    char a;  
    char b;  
    int c;  
};  
structA a = {'a' , 'a' ,1};    // 定义时直接赋初值  

在C++语言中struct具有了“类” 的功能,其与关键字class的区别在于struct中成员变量和函数的默认访问权限为public,而class的为private, C++中的struct保持了对C中struct的全面兼容(这符合C++的初衷——“a better c”)

 

部分参考 https://blog.csdn.net/u011388486/article/details/51336263