列舉的定義:
enum log_level
dbg,
inf,
war,
err,
fat,
all,
offvoid writeinfor(log_level level)
switch(level)
case dbg:printf("%d\n",dbg);
......
}}
上述定義的列舉型別,預設為dbg=0,inf=1,依次類推。
(1)列舉型別是實數型別,可以跟int型別相互轉換。 其所定義的常量子與列舉型別有同樣的可見性,即dbg等可以被列舉型別外面的**所看到。列舉型別沒有名字限定作用。struct有名字限定作用。
(2)列舉型別所佔的空間
c++標準文件中是這樣說明的:「列舉型別的尺寸是以能夠容納最大枚舉子的值的整數的尺寸」,同時標準中也說名了:「列舉型別中的枚舉子的值必須要能夠用乙個int型別表述」,也就是說,列舉型別的尺寸不能夠超過int型別的尺寸,但是是不是必須和int型別具有相同的尺寸呢?上面的標準已經說得很清楚了,只要能夠容納最大的枚舉子的值的整數就可以了。在vs2010中sizeof的值為4。
(3)列舉和int是否可以互換
列舉長度可能比int小,有些情況下最好不用互換。
enum etype ;
etype val;
std::scanf( "%d", &val );
列舉型別變數的尺寸不一定和int型別相同,這樣一來我們採用%d就 是說將列舉型別變數val當作4位元組的int變數來看待並進行引數壓棧,而在某些編 譯器下sizeof( val )等於1位元組,這樣scanf函式就會將val變數位址中的後續的三 位元組位址也壓入棧中,並對其進行賦值,也許val變數後續的三個位元組的位址沒有 特殊含義可以被改寫(比如是位元組對齊的空位址空間),可能會認為他不會出現錯 誤,其實不然,在scanf函式呼叫結束後會進行棧清理,這樣一來會導致scanf函式 清理了過多的位址空間,從而破壞了外圍函式的棧指標的指向,從而必然會導致程 序執行時錯誤。
結構體 共用體 列舉
結構體 共用體 列舉 分析 首先宣告的結構體元素year的位址是最低的 0012ff74 而最後宣告的day的位址是最高的 0012ff7c 而我們又知道在棧中宣告變數的時候,位址是從高到低的分配的.因此,切記在結構體中宣告的變數與直接在外面宣告是不一樣的.在結構體中,最先宣告的變數放在最低位的.另...
結構體 共用體 列舉
一 結構體 1.結構體和類一樣定義時最後要加分號 2.結構體型別定義變數時struct關鍵字不能省略 3定義好的結構體,系統對之不分配儲存單元 4.c99標準允許對某一成員初始化 5.不能企圖輸出結構體變數名來達到輸出結構體的目的 6.同類結構體間可以相互賦值 二 共用體 1.幾個不同的變數共享同一...
結構體,共用體,列舉體,typedef
概念 結構體時一種構造資料型別 用途 把不同型別的資料組合成乙個整體 記憶體 各成員所佔記憶體空間的累加 一.結構體的宣告與定義變數的方法一共有三種 1.常規定義 struct aa 注意大括號後面有分號 變數定義 struct 機構體名 結構體變數名錶 如 struct aa aa,bb 前面的s...