C語言結構體(Struct)

2021-08-29 07:46:02 字數 2231 閱讀 8758

在c

語言中,可以使用結構體(

struct

)來存放一組不同型別的資料。結構體的定義形式為:

struct

結構體名;

結構體是一種集合,它裡面包含了多個變數或陣列,它們的型別可以相同,也可以不同,每個這樣的變數或陣列都稱為結構體的成員(

member

)。請看下面的乙個例子:

struct stu;

stu

為結構體名,它包含了

5 個成員,分別是

name

、num

、age

、group

、score

。結構體成員的定義方式與變數和陣列的定義方式相同,只是不能初始化。

注意大括號後面的分號

;不能少,這是一條完整的語句。

結構體也是一種資料型別,它由程式設計師自己定義,可以包含多個其他型別的資料。 像

int、

float

、char

等是由c

語言本身提供的資料型別,不能再進行分拆,我們稱之為基本資料型別;而結構體可以包含多個基本型別的資料,也可以包含其他的結構體,我們將它稱為複雜資料型別或構造資料型別。

既然結構體是一種資料型別,那麼就可以用它來定義變數。例如:

struct stu stu1, stu2;

定義了兩個變數

stu1

和stu2

,它們都是

stu

型別,都由

5 個成員組成。注意關鍵字

struct

不能少。

stu

就像乙個「模板」,定義出來的變數都具有相同的性質。也可以將結構體比作「圖紙」,將結構體變數比作「零件」,根據同一張圖紙生產出來的零件的特性都是一樣的。

你也可以在定義結構體的同時定義結構體變數:

struct stu stu1, stu2;

將變數放在結構體定義的最後即可。

如果只需要

stu1

、stu2

兩個變數,後面不需要再使用結構體名定義其他變數,那麼在定義時也可以不給出結構體名,如下所示:

struct stu1, stu2;

這樣做書寫簡單,但是因為沒有結構體名,後面就沒法用該結構體定義新的變數。

理論上講結構體的各個成員在記憶體中是連續儲存的,和陣列非常類似,例如上面的結構體變數

stu1

、stu2

的記憶體分布如下圖所示,共占用

4+4+4+1+4 = 17

個位元組。

但是在編譯器的具體實現中,各個成員之間可能會存在縫隙,對於

stu1

、stu2

,成員變數

group

和score

之間就存在

3 個位元組的空白填充(見下圖)。這樣算來,

stu1

、stu2

其實占用了

17 + 3 = 20

個位元組。

結構體和陣列類似,也是一組資料的集合,整體使用沒有太大的意義。陣列使用下標

[ ]獲取單個元素,結構體使用點號

.獲取單個成員。獲取結構體成員的一般格式為:

結構體變數名

.成員名;

通過這種方式可以獲取成員的值,也可以給成員賦值:

#include

int main() stu1; //

給結構體成員賦值

stu1.name = "tom";

stu1.num = 12;

stu1.age = 18;

stu1.group = 'a';

stu1.score = 136.5; //

讀取結構體成員的值

printf("%s

的學號是

%d,年齡是

%d,在

%c組,今年的成績是

%.1f

!\n", stu1.name, stu1.num, stu1.age, stu1.group, stu1.score);

return 0; }

執行結果:

tom的學號是

12,年齡是

18,在

a組,今年的成績是

136.5!

除了可以對成員進行逐一賦值,也可以在定義時整體賦值,例如:

struct stu1, stu2 = ;

不過整體賦值僅限於定義結構體變數的時候,在使用過程中只能對成員逐一賦值,這和陣列的賦值非常類似。

C語言結構體struct

定義 定義結構體,要定義兩次,1定義型別,2定義變數 1定義時 不分配記憶體,和 define一樣 定義結構體的樣式,叫什麼名字,成員,句式 2再定義 分配記憶體 用著個樣式定義變數 與typedef有點像 3如果定義的是 p指標,只表示出此結構體 變數的起始位址 struct a struct a...

C語言 結構體struct 結構體對齊

1 定義乙個結構體 順便例項結構體變數 struct tag 結構體型別名 struct tag 這兩者共同構成了結構體型別 單獨的tag 結構體型別名 不能稱之為結構體型別 結構體變數名 2 定義的同時使用typedef 相當於定義結構體 為結構體起新名字 typedef struct tag 結...

Struct 結構體疑惑(c語言)

struct 結構體疑惑 c語言 如有錯,請務必指正 本文主要介紹在 struct 結構體中對陣列和指標的操作細節。我們需要明確兩個概念 a 初始化 分配記憶體並寫入值。b 賦值 查詢記憶體並寫入值。在結構體中,陣列和指標最大的的區別為 陣列將資訊存在結構體所占有的記憶體中,而指標是將資訊的首位址儲...