在實際問題中,一組資料往往具有不同的資料型別;例如在學生資訊登記表中,姓名為字元型,學號為整型或字元型,年齡為整型,性別為字元型,成績為整型或實型。因為資料型別不同,顯然不能用乙個陣列來存放。
在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後面我們會學習windows程式設計,大部分結構體都是這樣定義的。stustu
;stu
stu1, stu2;
在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 發現資訊比較鬆散且不直觀,資料訪問不...