C 結構 聯合與列舉

2022-09-19 08:00:12 字數 2455 閱讀 5743

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...