• C++ union 公共体


    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
    ",a.u.x,a.u.y,a.u.z);
    return 0;
    //输出 0,5,6 }
    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
     
    VS2010亲自试了下,确实如此
    #include "stdafx.h"
    #include <iostream>
    int _tmain(int argc, _TCHAR* argv[])
    {
        union{
          struct {
          int a;int b;int c; 
         }a;
    int k; }b; b.a.a=1; b.a.b=2; b.a.c=3; b.k=9; int aa; std::cout<<b.a.a<<b.a.b<<b.a.c; std::cin>>aa; return 0;
      //输出 923 }
  • 相关阅读:
    hdu 1686 Oulipo
    [NOI1997] 积木游戏
    错误录——未完待续
    NOI 2014 魔法森林
    hdu 4010 Query on The Trees
    求助大佬6——1种贪心
    51 nod 1205 流水线调度
    bzoj 1180: [CROATIAN2009]OTOCI
    HNOI2010 弹飞绵羊
    SDOI2008 洞穴勘测
  • 原文地址:https://www.cnblogs.com/holyson/p/3951165.html
Copyright © 2020-2023  润新知