C語言教程 十 復合結構

2022-05-29 06:36:13 字數 2976 閱讀 1808

一、結構體的定義和使用

前面我們已經討論過字元陣列與字串,字元指標也可以指向乙個字串,可以用字串常量對字元 指標進行初始化。例如: char *str = "" ; 這是對字元指標進行初始化。此時,字元指標指向乙個字串常量的首位址。 

結構體與陣列類似,都是由若干分量組成的,與陣列不同的是,結構體的成員可以是不同型別,可以通過成員名來訪問結構體的元素。 

結構體的定義說明了它的組成成員,以及每個成員的資料型別。定義一般形式如下: 

1

struct

結構型別名

2;

結構的定義說明了變數在結構中的存在格式,要使用該結構就必須說明結構型別的變數。結構變數說 明的一般形式如下: 

struct 結構型別名稱 結構變數名;

定義結構體便是定義了一種由成員組成的復合型別,而用這種型別說明了乙個變數才會產生具體的實 體。與說明基本資料型別的變數一樣,系統會按照結構定義時的內部組成,為說明的結構變數分配記憶體空 間。結構變數的成員在記憶體中占用連續的儲存區域,所佔記憶體大小為結構中每個成員的長度之和。 

我們可以將變數 student1 說明為 address 型別的結構變數: 

struct address student1; 

雖然,結構體作為若干成員的集合是乙個整體,但在使用結構時,不僅要對結構的整體進行操作,還 

經常要訪問結構中的每乙個成員。在程式中使用機構中成員的方法為: 

結構變數名.成員名稱 

如 student1.tel 表示結構變數 student1 的**資訊。 

和其他型別的變數一樣,結構變數也可以進行初始化。結構初始化的一般形式如下: 

struct 結構型別名 結構變數 = ;

1 #include2 #include34

struct

_info 5;

910intmain()

11

二、結構體的高階使用

結構體陣列 

結構體陣列是乙個陣列,其陣列的每乙個元素都是結構體型別。在實際應用中,經常用結構體陣列來 

表示具有相同資料結構的乙個群體,如乙個班的學生檔案,乙個車間職工的工資表等。定義結構體陣列和 

結構體變數相仿,只需說明它為陣列型別即可。 

比如定義乙個結構體陣列 student,包含 3 個元素:student[0]、student[1]、student[2],每個陣列元素都 

具有 struct address 的結構形式,並對該結構體陣列進行初始化賦值: 

1

struct

address

2student[3]=,

10 ,

11 12 }

指向結構體的指標 

當乙個指標用來指向乙個結構體變數時,稱之為結構體指標變數。結構體指標變數中的值是所指向的 結構變數的首位址,通過結構指標即可訪問該結構變數。這與陣列指標和函式指標的情況是相同的。結構 體指標變數定義的一般形式為: 

struct 結構型別名 *結構指標變數名

三、共用體的定義和使用

在 c 語言中,允許幾種不同型別的變數存放到同一段記憶體單元中,也就是使用覆蓋技術,幾個變數互 相覆蓋。這種幾個不同的變數共同占用一段記憶體的結構,被稱為共用體型別結構,簡稱共用體。一般定義 形式為: 

1

union 共用體名

2變數名表列;

只有先定義了共用體變數,才能在後續的程式中引用它。不能直接引用共用體變數,而只能引用共用 

體變數中的成員。引用方法如下: 

共用體變數名.成員名

共用體型別資料具有以下特點: 

同乙個記憶體段可以用來存放幾種不同型別的成員,但是在每一瞬間只能存放其中的一種,而不是同時 存放幾種。換句話說,每一瞬間只有乙個成員起作用,其他的成員不起作用,即不是同時都存在 和起作用的。 

共用體變數中起作用的成員是最後一次存放的成員,在存入乙個新成員後,原有成員就失去作用。 共用體變數的位址和它的各成員的位址都是同一位址。

1 #include2

union info3;

8int

main()

9

執行結果為:    

a:3b:3

c:3

不能對共用體變數名賦值,也不能企圖引用變數名來得到乙個值,並且,不能在定義共用體變數時對 它進行初始化。     

不能把共用體變數作為函式引數, 也不能是函式返回共用體變數, 但可以使用指向共用體變數的指標。 共用體型別可以出現在結構體型別的定義中,也可以定義共用體陣列。反之,結構體也可以出現在共 用體型別的定義中,陣列也可以作為共用體的成員。 

四、使用typedef定義型別

在 c 語言中,除系統定義的標準型別和使用者自定義的結構體、共用體等型別之外,還可以使用型別說 明語句 typedef 定義新的型別來代替已有的型別。typedef 語句的一般形式是: 

typedef 已定義的型別 新的型別; 

例如: 

1 typedef int integer; /*

指定用 integer 代表 int 型別

*/2 typedef float real; /*

指定用 real 代表 float 型別

*/

在具有上述 typedef 語句的程式中,下列語句就是等價的: 

1

int i, j; /*

與 integer i, j;*/2

float pi; /*

與 real pi;

*/

當然typedef的最常用的作用就是給結構體變數重新命名。

1 #include2 #include

3 typedef struct

_info

4info;

8int

main()

9

C語言教程(三)

主要普及c語言的基本語法,本文預設初看的人啥也不懂,如果有程式設計基礎請略過 下面來仔細看一下c編輯器預設給我們生成的 include int main 執行後可以在控制台看見 hello word於是可以做以下嘗試根據程式的變化來逐一了解 的含義 注釋printf hello word n inc...

C語言教程 迴圈

c語言中有2種最常用的迴圈語句 while迴圈 和for 迴圈。while迴圈 while loop while 表示式 程式塊還有乙個變種 do while迴圈,do while 表示式 只要while裡得到表示式是真的,就一直執行程式塊的語句。for迴圈 for loop for 表示式1 表示...

Golang 語言 教程

目錄 golang入門指南 golang教程,設定工作區 go mods hello world golang教程 變數 golang教程 資料型別 數字,字串和布林值 陣列,切片和對映 golang教程 型別轉換 條件語句 if else switch case 迴圈指標 函式可變函式 方法,結構...