結構,聯合和列舉

2021-06-06 04:24:10 字數 1758 閱讀 9468

結構

結構的宣告格式如下:

struct id;  //別忘了右花括號後面的分號

1.和陣列類似的是,結構變數可在定義時初始化,如:

struct id tae = ;

同樣的,這種初始化只能在定義時進行。若在定義之後的地方進行,編譯器會報錯;但可用匿名結構進行快速賦值,如:

struct id tae;

tae = ; //錯誤

tae = (struct id); //正確

2.與陣列不同的是,結構變數之間可以直接賦值,如:

struct id tae = , sam;

sam = tae; //可以,本質上是sam的每個成員都被賦成tae對應成員的值

3.結構變數(注意不是結構指標)作為函式引數時,屬於值傳遞

我們需要牢記一點,和陣列不同,乙個結構變數的名字不是該結構的位址

4.如果需要乙個結構來儲存字串,通常應用char陣列而非char指標

5.結構的成員變數使用malloc是可行的,但如何正確進行sizeof、memcpy等操作還需要進一步研究

6.伸縮型陣列成員

聯合

聯合的宣告格式與結構類似,如:

union hold;

聯合與結構的不同在於:聯合變數在同一時間只能儲存乙個值(有點像python中的變數),如

union hold fit;

fit.digit = 23; //把23儲存在fit中

fit.bigfl = 2.0; //清除23,儲存2.0

fit.letter = 'h'; //清除2.0,儲存'h'

所以需要注意:結構中,點運算子用來指定成員變數(本質上指向不同記憶體區域);而聯合中,點運算子是用來表示正在使用哪種資料型別(指向同一片記憶體)

編譯器為聯合變數分配足夠的空間以儲存可能的最大需要

列舉

列舉的宣告格式如下:

enum spec;

列舉建立乙個新型別並指定它可以具有的值(實際上不限制)

1.列舉型別的目的是提高程式可讀性

2.列舉列表中的元素(稱為列舉常量)本質上是int常量,因此可用於設定陣列大小或switch標籤。上述enum spec的定義相當於:

#define red 0

#define green 1

......

#define grey 4

3.列舉常量預設從0開始遞增,也可以手動設定,如:

enum spec color = red;

printf("%d\n", color); //列印0

color = yellow;

printf("%d\n", color); //列印3

enum another_spec ; //可以

結構體,列舉,聯合

結構體 1.結構體的建立 1 在構建結構體之前,必須要對結構體進行宣告。例 struct student 描述乙個學生,student為標籤 此處的分號不能丟,此處也可寫變數 2 成員訪問 2.1在 1 中的 struct student 相當於型別,比如 int型,struct student s...

結構體 聯合 列舉

一般的,在宣告乙個結構提示要使用struct關鍵字,例如 建立乙個學生 struct stu char name 20 名字 int age 年齡 char 5 性別 char id 20 學號 分號不能丟結構體得特殊宣告 沒有結構體名 structx 沒有結構體的標籤,就不能在結構體建立完成之後再...

結構體,列舉,聯合。

今天我們來學習一下結構體,列舉以及聯合等知識。一。首先從結構體開始,結構體與陣列一樣都是聚合型別。1.結構體的宣告 struct tag variable list tag 1 可以省略 2 見名思意 3 盡量不省略。member list 不能為空。variable list 可以省略。例如 描述...