C 結構體 共用體 列舉

2021-06-16 22:33:13 字數 1561 閱讀 8635

一、結構體:

首先為什麼要使用結構體?比如說你要儲存乙個學生的資訊,包含:姓名(char)、學號(int)、成績(double);我們希望可以把這些資訊放在乙個單元中,陣列滿足不了這種要求,因為陣列中每個元素的型別是一樣的。所以我們就需要別外一種資料格式,以就是現在要說的結構體

結構體是由使用者自己定義的一種資料格式,結構體的宣告就定義了這種型別的資料格式;

如學生結構體的宣告;

struct student;

定義好結構體以後就可以建立變數了:

student st;

注:在c中建立結構體時,關鍵字struct不可以省,要寫成 struct student st;但是在c++可以把struct省掉

成員的訪問:

比如要訪問name,則是st.name即可以了

結構體的初始化:

student st = 

;//和陣列一樣,他們之間用逗號隔開,可以寫在一行,也可以寫在多行

也可乙個個初始化,st.name = "vnvn";st.id = 23,st.grade = 100.0

c++11中初始化可以省略「=」號student st;

結構體陣列:

前面已經介紹了陣列這兒就不詳細介紹了

student st[2] = 

,//用逗號隔開 };

二、共用體:

共用體也叫聯合體(union)是一種資料格式,它能夠儲存不同的資料型別,但只能同時儲存其中的一種型別,共用體的宣告和結構體類似

共用體宣告:

union a

;a a;

a.a = 10;

當其中乙個元素的值改變後,所有值都會根著改變,因為他們是共用的同一片記憶體空間

三、列舉:

enum提供了另外一種建立符號常量的方式,這種方式可以代替const。它還允許定義新的型別但是必須 進行嚴格限制,使用enum的語句與使用結構相似。

enum week

預設的情況下第乙個為0,以後每乙個加1,week的值是愛限制的,只有0-6這個值

列舉變數具有一些特殊屬性,在不進行強轉的情況下,列舉只將定義時使用的列舉量賦給這種變數:

week w = monday;//可以

w = 5;//不可以這樣幹

w = 100;//不可這樣幹

因些week的值是愛到限制的,它就有那個7個值,如果想把別的值賦給week變數,編譯器則會報錯,還有乙個特點就是enum沒有運算子的

w++、w=w+1、、、、、、都是不可以的

但是有的人就是疑問因為int n = w + 1;是可以的,那是因為程式在執行的時候把w轉換成int型別

設定列舉的值:

列舉的值是可以自己設定的,enum week,在這裡monday 為1後面的每個都為前面乙個加1,也就是說tuesday為2,wednesday=3、、、、、、

enum week前面是從0開始,有設定的那個開始後面每個加1,monday =0,tuesday=1,thursday = 11、、、、、

但是注意,給列舉賦值,只能把整數賦值給列舉

C結構體 共用體 列舉

一 結構體三種定義方式 1 先宣告結構體型別,再定義變數名 struct student struct student student1,student2 2 在宣告型別的同時宣告變數 struct student student1,student2 3 直接定義結構體型別變數 struct stu...

結構體 共用體 列舉

結構體 共用體 列舉 分析 首先宣告的結構體元素year的位址是最低的 0012ff74 而最後宣告的day的位址是最高的 0012ff7c 而我們又知道在棧中宣告變數的時候,位址是從高到低的分配的.因此,切記在結構體中宣告的變數與直接在外面宣告是不一樣的.在結構體中,最先宣告的變數放在最低位的.另...

列舉,結構體,共用體

列舉的定義 enum log level dbg,inf,war,err,fat,all,offvoid writeinfor log level level switch level case dbg printf d n dbg 上述定義的列舉型別,預設為dbg 0,inf 1,依次類推。1 列...