程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> 關於C++ >> C++中數據對齊問題:struct、union、enum。再談sizeof()

C++中數據對齊問題:struct、union、enum。再談sizeof()

編輯:關於C++

首先是struct,在C++中,結構體其實和class有很大的相似了。但是有一點不同的是,struct默認是public,而class中是private.

當然,struct繼承等用法也是可以的。

共用體的聲明方式是:

枚舉的聲明方式與共用體比較相似

其中a初始化為0,後面默認增1,若已經初始化,則後面再增1,比如d=6在這裡。

struct長度計算

大家猜一下,s1 x;int b=sizeof(x);

他的結果會是多少呢?有人會覺得應該是1+8+4+1=14.

實際上是24.為什麼會是這樣呢?這個和結構體的對齊方式有很大關系。總之有兩條

那麼聯合體應該是怎麼樣的呢?

很顯然聯合體取值的時候只能取其中的一個,那麼,聯合體就是多個成員公用一個內存空間。大家很自然的就想到了,最大那個成員所占用的空間就是聯合體的空間了。

講到了數據的對齊方式,那我們就非常有必要講一下兩種不同機器的存儲方式:大端存儲模式和小端存儲模式。

大端存儲模式:高位字節存儲低地位內存中,低位字節存儲高位。這裡均以0x12345678為例。

小端存儲模式:低位存儲在高位內存中

在小端系統中,b的ASCII為多少?

union enumName {
    int i;
    unsigned char ch[2];
};
int _tmain(int argc, _TCHAR* argv[])
{
    enumName student;
       student.i=0x1420;
    char b=student.ch[0];
}

答案應該是32

小端是低位放低位,高位放高位。則是20   14這樣排放。ch[0]等於0x20.

其實我們平常使用的計算機很多都是小端存儲。

出處:http://www.cnblogs.com/xiaoyi115/p/3622135.html

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved