C語言結構體的定義和使用

2021-07-08 17:37:25 字數 2211 閱讀 8184

在實際問題中,一組資料往往具有不同的資料型別;例如在學生資訊登記表中,姓名為字元型,學號為整型或字元型,年齡為整型,性別為字元型,成績為整型或實型。因為資料型別不同,顯然不能用乙個陣列來存放。

在c語言中,可以使用

結構體(struct)

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

struct 結構體名;

每個成員都是結構體的組成部分,有名字,也有資料型別,形式為:

型別說明符 成員名;

例如用結構體來表示學生資訊:

struct

stu;

結構體是一種構造資料型別(也稱複雜資料型別),由若干不同型別的變數(資料)組成。每個變數都是結構體的

成員(member)

,每個成員可以是基本資料型別,也可以是構造型別。

相應的,int、char、float 這些資料型別被稱為基本資料型別。
上面的**定義了乙個結構體,名字為stu。stu由4個成員組成,分別為 name、num、***、score。

注意大括號後面的分號;不能少。

結構體也是一種資料型別,可以用來說明變數。例如:

struct stu stu1, stu2;
定義了兩個變數 stu1 和 stu2,它們都是 stu 型別,都由 4 個成員組成。注意關鍵字struct不能少。

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

結構體的各個成員在記憶體中是連續儲存的。stu1、stu2 的記憶體如下圖所示:

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

struct

stu stu1, stu2;

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

如果只需要 stu1、stu2 兩個變數,也可以不寫結構體名字:

struct

stu1, stu2;

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

也可以用巨集定義使乙個符號常量來表示乙個結構型別,例如:

#define stu struct

stustu

;stu

stu1, stu2;

後面我們會學習windows程式設計,大部分結構體都是這樣定義的。

在c語言中,使用點號.來獲取結構體中的乙個成員,一般格式為:

結構變數名.成員名

例如:

stu1.name;

//第乙個學生的姓名

stu2.score;

//第二個學生的成績

獲取成員後,就可以對該成員進行賦值了,例如:

stu1.name =

"tom"

;stu2.score =

90.5

;

除了可以對成員進行逐一賦值,也可以像陣列一樣整體賦值,例如:

struct

stu stu1, stu2 =

;

不過整體賦值僅限於上面這樣的情況,也就是定義結構體的同時宣告變數。下面的寫法是錯誤的:

stu2 = ;
乙個完整的示例:

#include

#define stu struct

stuint

main();

stustu1;

stu1.name =

"james bond"

;stu1.num =1;

stu1.*** =

'm';

//用m表示男性,w表示女性

stu1.score =99;

printf

("hello everyone! my name is %s, a naughty boy, but with good scores(%.2f) and top no.(%d)!"

, stu1.name, stu1.score, stu1.num);

return0;

}

執行結果:

hello everyone! my name is james bond, a naughty boy, but with good scores(99.00) and top no.(1)!

**:

c語言結構體的定義和使用

2.編寫乙個函式print,列印乙個學生的成績陣列,該陣列中有5個學生的資料記錄,每個記錄包括num,name,score 3 用主函式輸入這些記錄,用print函式輸出這些記錄。如下 include struct student student 5 全域性結構體陣列 在全域性都可以使用,例如被調函...

c語言 定義和使用結構體變數

1.結構體型別 由於乙個陣列中只能存放同一種型別的資料,很不方便,所以c語言允許使用者自己建立由不同型別資料組成的組合型的資料結構,也就是結構體,通俗講就像是打包封裝,把一些有共同特徵 比如同屬於某一類事物的屬性,往往是某種業務相關屬性的聚合 的變數封裝在內部,通過一定方法訪問修改內部變數。宣告乙個...

c 結構體的定義和使用

在許多現實問題中,一組資料往往有很多的資料型別。比如,在一學生登記表中,有姓名,id,手機號,它們有字元型別也有整型。顯然不能用乙個陣列來存放這一組資料。當使用多個陣列存放時 char id 3 10 char name 3 10 char phone 3 20 發現資訊比較鬆散且不直觀,資料訪問不...