C++ union 公共体
生活随笔
收集整理的這篇文章主要介紹了
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\n",a.u.x,a.u.y,a.u.z);
return 0;
//輸出 0,5,6 }
}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 }
//輸出 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 }
?
轉載于:https://www.cnblogs.com/holyson/p/3951165.html
總結
以上是生活随笔為你收集整理的C++ union 公共体的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: cpu,内存和disk使用报警脚本
- 下一篇: 【CSS+HTML】关于字体的说明