C語言中結構 聯合 列舉的說明

2022-05-24 02:12:10 字數 2470 閱讀 8924

複雜的資料型別

一般的步驟:

1、宣告模板

2、定義變數,分配記憶體空間

3、初始化

標記、識別符號、標籤

結構:

設計程式很重要的一步是提高表示資料的能力,選擇表示資料的方法。c提供了結構變數(structure variable)提高你表示資料的能力。

結構宣告(structure variable)描述了乙個結構的組織布局。宣告類似如下:

struct booklibrary;

宣告結構的過程和定義結構變數的過程可以組合成乙個步驟。

使用在一對花括號括起來的初始化列表進行初始化。各初始化項用逗號分隔。讓每個成員的初始化項獨佔一行,這樣做只是為了提高**的可讀性。對編譯器而言,只需要用逗號分隔各成員的初始化項即可。

結構類似於超級陣列。超級陣列中,可以是乙個元素為char型別,乙個元素為forat型別,乙個元素為int陣列。

陣列可以通過陣列下標單獨訪問陣列中的各元素。

訪問結構中的成員,可以使用結構成員運算子---->點(.)訪問結構中的成員

例如library.value即訪問library中的value部分。可以像使用任何float型別變數那樣使用library.value。library是乙個結構,library.value是乙個float型別的變數。

c99和c11為結構指定了初始化器

struct book gift=;

struct pnames treas = ;

對於struct name型別的變數veep來說,以上字串都儲存在結構內部;這種做法比較佔空間。

對於struct pnames型別的變數treas來說,字串儲存在編譯器儲存常量的地方。結構本身只儲存了兩個位址。

如果pnames型別的變數treas未經初始化,位址可以是任何值,這一操作可能導致程式奔潰。

因此,如果要用結構儲存字串,用字元陣列比較簡單。用指向char的指標也行,但是誤用會導致嚴重問題。

聯合:

聯合(union)是一種資料型別,它能在同乙個記憶體空間中儲存不同的資料型別(不是同時儲存)。

典型用法:設計一種表以儲存既無規律、事先也不知道順序的混合型別。使用聯合型別的陣列,其中的聯合都大小相等,每個聯合可以儲存各種資料型別。

建立聯合和建立結構的方式相同,需要乙個聯合模板和聯合變數。

先定義乙個帶標記的聯合模板

union hold;

enum spectrum color;

第一條宣告:spetrum是標記,允許把enum spectrum作為乙個型別名使用。花括號內的識別符號列舉了spectrum變數可能有的值。這些符號常量叫做列舉符

第二條宣告:color作為該型別的變數。

enum常量:

red=0,orange=1。從技術層面看,這些列舉符都是int型別的常量。

預設值:

預設情況下,列舉列表中的常量都被賦予0、1、2等。

賦值:

在列舉宣告中,可以為列舉常量指定整數值。

enum level ;

考慮以下情況:

enum feline ;

那麼cat的值是預設0,puma是11,tiger是12;

enum的用法:

列舉型別的目的是增強程式的可讀性和可維護性。

注意,列舉型別只能在內部使用,如果要輸入color中orange的值,只能輸入1。而不是單詞orange。或者,讓程式先讀入orange,在將其轉換為orange代表的值。

列舉型別是整數型別,所以可以在表示式中以使用整數變數的方式使用enum變數。它們用在case語句中很方便。

共享命名空間:

c語言使用命名空間(namespace)來標識程式中的各部分,即通過名稱來識別。作用域是命名空間概念的一部分:兩個不同作用域的同名變數不衝突,兩個相同作用域的同名變數衝突。

在特定作用域中,結構標記,聯合標記,列舉標記都共享相同的命名空間,該命名空間與普通變數使用的空間不同。這意味著在相同作用域中變數和標記的名稱可以相同,不會引起衝突。但是不建議使用相同的識別符號,以免引起混亂。

注意,在c++中,把標記和變數名放在相同的命名空間中。

C程式語言 列舉 結構 聯合

標籤 空格分隔 c 10.1.1 列舉 列舉 常量符號化 列舉 列舉型別名字通常並不真的使用,要用的是在大括號裡的名字,因為它們就是常量符號,它們的型別是int,值則依次從0到n。如 就建立了三個常量,red的值是0,yellow的值是1,green的值是2。當需要一些可以排列起來的常量值時,定義列...

C語言中的自定義型別 結構體 列舉 聯合

我們知道c語言基本資料型別有 本篇將重點介紹c語言中的自定義型別 結構體 列舉 聯合 struct stu int main 含義 define crt secure no warnings 1 include include struct x struct p int main 上面的 執行後發現...

C語言 列舉,聯合

7 列舉可以用來建立新的型別 8 列舉型別儲存區就是整數型別儲存區,列舉型別儲存區應該只能放有限的幾個整數 9 列舉型別也需要先宣告後定義,宣告使用enum關鍵字 10 宣告列舉型別的時候需要提供一組名稱,計算機為每個名稱分配乙個對應的整數,列舉型別只能存放這些整數 11 不同列舉型別所能記錄的整數...