青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

程序讓生活更美好

半畝方塘 天光云影

  C++博客 ::  :: 新隨筆 :: 聯系 ::  :: 管理 ::
  55 隨筆 :: 4 文章 :: 202 評論 :: 0 Trackbacks

struct union 的區別

在編程的時候,經常會遇到使用一個變量處理多種數據的情況,在這種情況下,如果我們不考慮使用類,那么就可以是struct(結構)和union(聯合)來進行處理。那么,這兩種結構之間到底有什么不同呢?

可以先看下面的一個小例子。

 1 #include  < iostream >
 2 using   namespace  std;
 3
 4 union U1 {
 5      char  c;
 6      int  i;
 7      double  d;
 8     }
;
 9 union U2 {
10      char  c;
11      // int i;
12      // double d;
13     }
;
14
15 union U3 {
16      char  c;
17      int  i;
18      // double d;
19     }
;
20
21 struct  S1 {
22      char  c;
23      int  i;
24      double  d;
25     }
;
26
27 struct  S2 {
28      char  c;
29      int  i;
30      // double d;
31     }
;
32
33 int  main() {
34     cout << " U1's size = " << sizeof (U1) << endl;
35     cout << " U2's size = " << sizeof (U2) << endl;
36     cout << " U3's size = " << sizeof (U3) << endl;
37     cout << endl;
38     cout << " -------------------------------- " << endl;
39     cout << " S1's size = " << sizeof (S1) << endl;
40     cout << " 其中 " << sizeof ( char ) << " + " << sizeof ( int ) << " + " << sizeof ( double ) << " = " << sizeof ( char ) + sizeof ( int ) + sizeof ( double ) << endl;
41     cout << " ---------- " << endl;
42     cout << " S2's size = " << sizeof (S2) << endl;
43     cout << " 其中 " << sizeof ( char ) << " + " << sizeof ( int ) << " = " << sizeof ( char ) + sizeof ( int ) << endl;
44     cout << " -------------------------------- " << endl;
45     S1 s;
46     s.c = ' A ' ;
47         cout << " 1 s.c =  " << s.c << endl;
48     s.d = 23.2132 ;
49         cout << " 1 s.d =  " << s.d << endl;
50
51         cout << " 2 s.c =  " << s.c << endl;
52         cout << " 2 s.d =  " << s.d << endl;
53         cout << " -----------------------  " << endl;
54     U1 u;
55         u.c = ' A ' ;
56         cout << " 1 u.c =  " << u.c << endl;
57     
58         u.i = 23322 ;
59         cout << " 1 u.i =  " << u.i << endl;
60
61         u.d = 23.2132 ;
62         cout << " 1 u.d =  " << u.d << endl;
63         cout << " 2 u.c =  " << u.c << endl;
64         cout << " 2 u.i =  " << u.i << endl;
65      return   0 ;
66 }

67

輸出結果為:

U1's size =8

U2's size =1

U3's size =4

 

--------------------------------

S1's size =16

其中 1+4+8=13

----------

S2's size =8

其中 1+4=5

--------------------------------

1 s.c = A

1 s.d = 23.2132

2 s.c = A

2 s.d = 23.2132

-----------------------

1 u.c = A

1 u.i = 23322

1 u.d = 23.2132

2 u.c =

2 u.i = 1181975000

解釋:

struct 類型的內存分配是結合內部的所有變量大小和相關的,但不是簡單的相加,從上面的例子就可以看出來, struct 類型的分配的內存大小是應該內部最大數據類型的整數倍,不足一倍的部分會自動補全成一倍大小,應該是編譯器為了數據整齊,處理速度會快些把。 union 類型的內存分配,只是和聯合體內的最大的一個數據類型的大小相關,而且 union 內的所有數據都在一個單獨的內存空間里面。這些就是上面程序出現這樣的結果的原因。


   所以,
u.c 的值是 A ,當給聯合體內的其他變量賦值之后, u.c 的值就是一個無用的信息。同樣, u.i 的值最初是 23322 ,當給 u.d 賦值 23.2132 之后, u.i 的值就變得無用了。


posted on 2006-03-20 17:02 北風之神007 閱讀(10022) 評論(5)  編輯 收藏 引用 所屬分類: c/c++

評論

# re: struct 與union的區別 2007-09-07 10:47 路人甲
謝謝~~ 學到了不少

不過感覺struct類型的分配的內存大小應該是,大于等于內部所有變量大小的和的一個2的密指數。
  回復  更多評論
  

# re: struct 與union的區別 2008-01-26 11:42 路人已
真的很感謝,終于知道了union的優點了*^_^*  回復  更多評論
  

# re: struct 與union的區別 [未登錄] 2008-11-04 15:23 tom
memory alignment@路人甲
  回復  更多評論
  

# re: struct 與union的區別 2010-09-21 09:08 愛的隧道
@路人甲
應該是不小于所有變量的和且最接近之的4的倍數。  回復  更多評論
  

# re: struct 與union的區別 [未登錄] 2011-09-23 15:02 aaaa
最后為什么2 u.i = 1181975000?  回復  更多評論
  

青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            精品动漫一区二区| 国产日产欧产精品推荐色 | 亚洲国产一区二区a毛片| 欧美一区二区视频在线观看| 欧美精品亚洲| 激情久久久久久| 久久精品日韩欧美| 亚洲免费一区二区| 国产精品爽爽爽| 亚洲男人影院| 亚洲一区二区三区四区在线观看| 欧美精品福利| 亚洲精品婷婷| 亚洲精品国产品国语在线app| 美女精品自拍一二三四| 亚洲黄色成人| 亚洲国产专区校园欧美| 欧美激情成人在线视频| 99成人免费视频| 亚洲麻豆一区| 欧美特黄一区| 欧美一级淫片aaaaaaa视频| 亚洲欧洲在线一区| 久久精品一区二区三区中文字幕| 国产精品久久久| 性刺激综合网| 久久先锋资源| 亚洲精品日韩在线| 亚洲理论在线观看| 国产精品午夜在线| 久久久亚洲综合| 美女诱惑黄网站一区| 亚洲毛片在线| 亚洲视频在线观看网站| 国产一区二区按摩在线观看| 欧美成人免费小视频| 欧美激情久久久久| 午夜久久久久久| 久久久亚洲成人| 亚洲视频福利| 欧美亚洲免费高清在线观看| 在线日韩视频| 欧美国产日韩一二三区| 欧美日韩三级| 亚洲欧美一级二级三级| 久久www成人_看片免费不卡| 亚洲欧洲一区| 亚洲欧美韩国| 亚洲日本中文字幕| 亚洲免费视频一区二区| 亚洲国产成人在线| 亚洲欧美另类中文字幕| 亚洲日本va午夜在线电影| 亚洲一区二区精品| 亚洲国产一区二区a毛片| 亚洲一区制服诱惑| 亚洲人成欧美中文字幕| 欧美一区二区三区婷婷月色 | 免费在线亚洲欧美| 亚洲欧美一区二区三区久久| 久久激情视频免费观看| 亚洲丝袜av一区| 免费日韩成人| 久久精品视频在线| 国产精品高精视频免费| 亚洲第一页在线| 激情久久久久久久久久久久久久久久| 欧美freesex8一10精品| 国产精品第2页| 亚洲精品一区二区在线观看| 在线播放日韩专区| 欧美与黑人午夜性猛交久久久| 亚洲尤物视频网| 欧美日本视频在线| 亚洲国产精品久久精品怡红院 | 久久男人资源视频| 亚洲自拍偷拍视频| 欧美.日韩.国产.一区.二区| 久久久噜噜噜久久久| 国产精品一区二区在线观看网站| 99ri日韩精品视频| 在线视频你懂得一区二区三区| 免费成人激情视频| 欧美激情一区二区三区全黄 | 久久综合图片| 久久综合色88| 国产精品一区二区你懂得| 亚洲视频综合在线| 午夜精品久久99蜜桃的功能介绍| 久久综合九色综合久99| 欧美激情第9页| 亚洲欧洲在线一区| 免费欧美在线视频| 久久久综合免费视频| 激情综合电影网| 亚洲愉拍自拍另类高清精品| 亚洲一区二区三区影院| 欧美日韩精品欧美日韩精品| 亚洲免费不卡| 午夜精品久久久久久久男人的天堂 | 国内精品久久久久久| 久久成人精品一区二区三区| 久久亚洲一区二区三区四区| 狠狠久久婷婷| 欧美r片在线| 亚洲经典在线看| 亚洲午夜三级在线| 国产精品久久波多野结衣| 欧美一区二区三区在线观看视频| 美女福利精品视频| 亚洲三级免费电影| 国产精品国产自产拍高清av| 午夜天堂精品久久久久| 免费一级欧美在线大片| 亚洲免费电影在线| 国产精品入口福利| 久久久久久久欧美精品| 亚洲人成在线观看| 欧美一区1区三区3区公司| 在线精品福利| 欧美日韩免费一区二区三区| 午夜精品美女自拍福到在线| 久久综合久久综合这里只有精品| 99在线热播精品免费| 国产欧美一区二区精品忘忧草| 久久另类ts人妖一区二区| 日韩视频在线一区| 久久久午夜精品| 亚洲嫩草精品久久| 亚洲国产一二三| 国产精品亚洲一区二区三区在线| 欧美成人午夜激情在线| 亚洲天堂久久| 亚洲久久一区| 午夜视频在线观看一区二区三区| 亚洲电影有码| 麻豆精品网站| 亚洲欧美视频在线观看视频| 欧美国产精品日韩| 久久成人免费网| 亚洲专区在线| 在线中文字幕日韩| 亚洲激情社区| 樱桃视频在线观看一区| 国产精品视区| 欧美视频在线观看免费网址| 老司机成人在线视频| 欧美在线免费视屏| 亚洲一区二区精品视频| 亚洲美女av电影| 91久久久一线二线三线品牌| 牛牛精品成人免费视频| 久久久久久久91| 久久久精品动漫| 欧美一区二区福利在线| 亚洲一区二区视频| 日韩午夜精品| 国产日韩欧美在线播放不卡| 欧美日韩久久不卡| 欧美日韩不卡| 欧美日韩成人综合在线一区二区| 男人插女人欧美| 久久在线观看视频| 久久频这里精品99香蕉| 久久精品国产亚洲aⅴ| 欧美在线三区| 久久久久久久性| 久久亚洲视频| 久久综合电影| 欧美成人精品激情在线观看| 欧美好吊妞视频| 欧美激情一区二区三区高清视频| 国产一区二区在线观看免费播放| 国产精品久久久久国产精品日日| 国产酒店精品激情| 亚洲第一色中文字幕| 99天天综合性| 久久精品夜色噜噜亚洲aⅴ| 欧美国产精品劲爆| 亚洲视频导航| 麻豆精品精华液| 国产精品视屏| 亚洲精选大片| 久久精品国语| 日韩视频第一页| 久久久午夜精品| 国产精品高清免费在线观看| 伊人成年综合电影网| 亚洲综合大片69999| 欧美1区2区视频| 亚洲欧美日韩国产成人精品影院| 老司机一区二区三区| 国产精品网站在线观看| 亚洲美女尤物影院| 久久这里只有精品视频首页| 日韩一二三区视频| 老司机精品视频网站| 国产欧美日韩精品专区| 亚洲午夜黄色| 欧美黑人国产人伦爽爽爽|