久久国产成人av_抖音国产毛片_a片网站免费观看_A片无码播放手机在线观看,色五月在线观看,亚洲精品m在线观看,女人自慰的免费网址,悠悠在线观看精品视频,一级日本片免费的,亚洲精品久,国产精品成人久久久久久久

分享

struct/union/enum的區(qū)別

 guitarhua 2012-12-13

struct/union/enum的區(qū)別

(2012-09-24 09:38:38)
標簽:

雜談

分類: 學習

關于C++和C的區(qū)別:
區(qū)別最大的是struct,,C++中的struct幾乎和class一樣了,,可以有成員函數,而C中的struct只能包含成員變量,。 enum,union沒區(qū)別,。


struct的定義:

struct  結構標簽

{

      類型1 標識符1;

      類型2 標識符2,;

      類型3 標識符3,;

      類型4 標識符4;

      類型5 標識符5,;

},;

1、建議將struct的聲明和變量的定義分開寫,,

2,、struct內可以放任何類型的變量聲明。


struct的內存對齊:

對齊原則:

1,、數據成員對齊規(guī)則,。每個數據成員存儲的起始位置要從該成員大小的整數倍開始。

2,、數據成員包含結構體:結構體成員要從其內部最大元素大小的整數倍地址開始存儲,。

3、結構體的總大小:是其內部最大基本成員的整數倍,,不足的要補齊,。
這個似乎不太重要,沒有太大的關系,。也就是某些面試或考試題中的難為人的地方了,。

union的定義:

union 聯合標簽

{

      類型1 標識符1;

      類型2 標識符2,;

      類型3 標識符3,;

      類型4 標識符4;

      類型5 標識符5,;

},;


聯合體與結構體的區(qū)別:

1,、結構體中,每個變量依次存儲,。

2,、聯合體中,每個變量都是從偏移地址零開始存儲,,每次只有一個成員存儲于該地址,。


enum的定義:

enum 枚舉標簽{small, media =7, large =10,humungous};

1、枚舉通過簡單的操作將一串名字和一串整型值相聯系起來,。

2,、缺省情況下,枚舉從零開始,,如果對列表中的某一個標識符賦值,,下一個標識符值比前面一個的值大1.

3、#define 定義的值在編譯時候消失,,但是枚舉定義的,,則在調試的過程任然是可見的,可以在代碼調試中使用它們,。
其實 enum可以相對應define來使用,。

舉個例子:
union a
{
    int b;
    char c;
};
a abc;
abc.b=4;
abc.c=5;
//或者也可以直接在定義時定義變量
union a
{
    int b;
    char c;
}abc;
abc.b=4;
abc.c=5;
或者:
typedef union
{
    int b;
    char c;
}a;
a abc;
abc.b=4;
abc.c=5;

仔細的看看,很重要,,老是用的不對,,自己給自己找麻煩的。

/////////////////////////////////////////////////////////////////////////

/////////////////////////////////////////////////////////////////////////

struct的最終大小考慮是最大的那個類型的倍數和每個都要對齊,; 
enum的大小考慮是最大的那個 
enum是枚舉,,就是某個變量的值是能夠列舉的,比如,,星期的話就每周1到7,,月的話就1到12、而struct的話是對于某個變量是有很多數據類型構成一個總體的,,比如學生這個變量,,他需要學號,姓名,,年齡,性別等等,,這個時候就需要定義結構體了,。而uninon的話呢,其中定義的變量都只占一同塊內存,。,。,。   

對于結構體:考慮要對齊和占用最大空間的元素所占空間的倍數

對于聯合體:考慮是里面所有類型數據占用空間的倍數同時還要比最大的那個還要大的最小數,就是聯合體占用的空間,,注意數組類型的處理?。?!

typedef enum
{
 ANUnknown = 0,
 ANShapeFile = 1,
 ANSDEDatabase = 2,
 ANFileDatabase = 3,
 ANRasterFile = 4
}ANDataType;

sizeof(ANDataType) 為 4

======================================================
struct AAA
{
 double d;
 char ss;
 char s;
};

sizeof(AAA) 為  結構中長度最大的變量的倍數(遵循內存對齊的原則),,如上,double 的長度為 8,, 則整個為 8*2 = 16,, 因為 char 長度為1,兩個char 為2,,仍小于8,,故按8計算,若有9個char變量,,則其中 8個char 合計為 8,,剩余一個不

足8 按 8字節(jié)計算。比如:
 struct AAA
{
 double d;
 char s1;
 char s2;
 char s3;
 char s4;
 char s5;
 char s6;
 char s7;
 char s8;
 char s9;
};
按結構體中的變量的長度疊加,,則大小為 8+(1+1+1+1+1+1+1+1)+1 = 17,,  16 < 17 < 24, 則結構體的大小為 24
比如,

 struct AAA
{
 double d;
 char s1;
 int i;
};
按結構體中的變量的長度疊加,,則大小為 8+1+4 = 13,,  8 < 13 < 16, 則結構體的大小為 16

======================================================

union AAA
{
 double d;
 int i;
};

聯合,則以定義中最大的數據類型的長度為準,,此聯合的 size 為 8

備注: union 與 struct 的大小與其內部定義的函數無關?。?!

    本站是提供個人知識管理的網絡存儲空間,,所有內容均由用戶發(fā)布,不代表本站觀點,。請注意甄別內容中的聯系方式,、誘導購買等信息,謹防詐騙,。如發(fā)現有害或侵權內容,,請點擊一鍵舉報。
    轉藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多