8.1 結構:是任意型別元素的集合。
8.1.1 結構布局
結構型別的物件可以被賦值,作為實參傳入函式,或者作為函式返回。
struct readout
布局方式:1 (4);4; 1(4);sizeof(readout)=12;短長短的風格,剩餘空間未使用;
struct readout
布局方式:4;2(4);sizeof(readout)=8;第二行剩餘2個空間未使用;
struct的名字:
c++中允許在同乙個作用域中分別宣告乙個struct和乙個非struct的型別。
例如:struct stat {};
int stat (char *name,struct stat *but);
結構和類:
struct是一種類,它的成員函式預設為public,struct可以包含成員函式,尤其是建構函式。
對於兩個struct來說,即使它們成員相同,它們本身仍是不同的型別。
struct s1 ;
struct s2 ;
s1和s2是兩種完全不同的型別,struct本身的型別與其成員的型別也不一樣。
s1 x; int i=x;錯誤。
8.2 聯合
union value
struct entry
void f (entry*p)
8.3 列舉
列舉型別用於存放使用者指定的一組整數數值,列舉型別的每種取值各自對應乙個名字。
列舉型別:
enum class,它的列舉值位於enum的區域性作用域,列舉值不會隱式的轉換為其他型別。
「普通的enum」,它的列舉值名字與列舉型別本身位於同乙個作用域中,列舉值隱式轉化為整數值。
8.3.1 enum class
enum
class
traffic_light
;enum
class
warning
;warning a1=7;
//錯誤,不存在int向warning轉化;
int a2= green;
//錯誤,green不位於作用域中;
int a3= warning::green;
//錯誤,不存在warning向int轉化;
warning a4=warning::green;
void
f(traffic_light x)
//錯誤
if(x=
=red)
//錯誤,當前作用域無red;
if(x=
=warning::red)
//錯誤
if(x=
=traffic_light::red)
}enum
class
warning
:int
;//sizeof(warning= =sizeof(int))
enum
class
warning
:char
;//sizeof(warning==1)
enum
class
flag
:char
;int i =
static_cast
<
int>
(flag::y)
;//2
char c =
static_cast
<
char
>
(flag::e)
;//8
8.3.2 普通的 enum
enum traffic_light
;enum warning
;warning a1=7;
//錯誤,不存在int向warning轉化;
int a2= green;
/正確,green位於作用域中,轉化為int;
int a3= warning::green;
//正確,不存在warning向int轉化;
warning a4=warning::green;
void
f(traffic_light x)
//ok,但是無這個值
if(x=
=red)
//錯誤,當前作用域無red;
if(x=
=warning::red)
//ok
if(x=
=traffic_light::red)
}
避免在同一作用域的兩個普通列舉中都定義red,易發生二義性。
普通enum enum
enum ;
結構體列舉與聯合
基本介紹 struct是結構體的關鍵字,它將一些相關聯的資料打包成乙個整體,這些相關聯的資料可以是不同的型別。它們被稱為結構體的成員,結構體的成員可以是標量 陣列 指標 或者是其他結構體。結構的宣告 假設我們要建立學生檔案,要納入學生的姓名,年齡和性別三個內容。那麼我們可以通過建立乙個結構體來實現這...
C程式語言 列舉 結構 聯合
標籤 空格分隔 c 10.1.1 列舉 列舉 常量符號化 列舉 列舉型別名字通常並不真的使用,要用的是在大括號裡的名字,因為它們就是常量符號,它們的型別是int,值則依次從0到n。如 就建立了三個常量,red的值是0,yellow的值是1,green的值是2。當需要一些可以排列起來的常量值時,定義列...
列舉與聯合
列舉 乙個被命名的整型常數的集合,關鍵字為 enum 列舉的定義與賦值 enum day 關鍵字加列舉名 注意 1.像這樣沒有進行初始化,則代表從第乙個成員起,依次賦值為0,1,2 但當其某個成員賦值 初始化 後,其後邊的成員按加1的規則確定其值。eg enum num 則a 0,b 0,c 1,d...