c語言 結構體

2021-09-22 12:59:17 字數 1438 閱讀 4972

c語言結構體從本質上講是一種自定義的資料型別,只不過這種資料型別比較複雜,是由 int、char、float 等基本型別組成的,結構體就是一種複合型的自定義資料型別。例如,在校學生有姓名、年齡、身高、成績等屬性,這時我們就可以定義乙個學生結構體型別。

下面我將據乙個例子:

struct stu;
stu 為結構體名,它包含了 5 個成員,分別是 name、num、age、group、score。結構體成員的定義方式與變數和陣列的定義方式相同,只是不能初始化。

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

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

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

#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!

通過前面的講解,我們知道結構體是一種構造型別或複雜型別,它可以包含多個型別不同的成員。在c語言中,還有另外一種和結構體非常類似的語法,叫做共用體,它的定義格式為:

union 共用體名;
結構體占用的記憶體大於等於所有成員占用的記憶體的總和(成員之間可能會存在縫隙),共用體占用的記憶體等於最長的成員占用的記憶體。共用體使用了記憶體覆蓋技術,同一時刻只能儲存乙個成員的值,如果對新的成員賦值,就會把原來成員的值覆蓋掉。

union data;

union data a, b, c;

共用體 data 中,成員 f 占用的記憶體最多,為 8 個位元組,所以 data 型別的變數(也就是 a、b、c)也占用 8 個位元組的記憶體,請看下面的演示:

#include union data;

int main()

執行結果:

4, 4

40, @, 40

39, 9, 39

2059, y, 2059

3e25ad54, t, ad54

C語言結構體

1.1.1 結構概念 1 結構存在的意義 存在是合理的,許多事物的存在是在不斷解決問題引入的,當然有更好的方法出現時改變也是合理的。在實際問題中,一組資料往往具有不同的資料型別。例如,在學生登記表中,姓名應為字元型,學號可為整型或字元型,年齡應為整型,性別應為字元型,成績可為整型或實型。顯然不能用乙...

C語言 結構體

宣告乙個結構體型別 struct 結構體名 成員表列 定義結構體變數的方法 1 先宣告結構體型別再定義變數名。在定義了結構體變數後,系統會為之分配記憶體單元.例如 struct student student1,student2 2 在宣告型別的同時定義變數,例如 struct 結構體名 成員表列 ...

c語言 結構體

1 定義結構體 c語言允許使用者自己建立不同型別資料組成的組合型的資料結構 struct 結構體名 1 結構體的型別不是只有一種,可以根據需要設計許多種,如struct student struct worker等 2 結構體的成員可以是另一結構體的成員,注意的是引用此成員的方式 2 定義結構體變數...