C說話 構造體(Struct)詳解及示例代碼。本站提示廣大學習愛好者:(C說話 構造體(Struct)詳解及示例代碼)文章只能為提供參考,不一定能成為您想要的結果。以下是C說話 構造體(Struct)詳解及示例代碼正文
後面的教程中我們講授了數組(Array),它是一組具有雷同類型的數據的聚集。但在現實的編程進程中,我們常常還須要一組類型分歧的數據,例如關於先生信息掛號表,姓名為字符串,學號為整數,年紀為整數,地點的進修小組為字符,成就為小數,由於數據類型分歧,明顯不克不及用一個數組來寄存。
在C說話中,可使用構造體(Struct)來寄存一組分歧類型的數據。構造體的界說情勢為:
struct 構造體名{
構造體所包括的變量或數組
};
構造體是一種聚集,它外面包括了多個變量或數組,它們的類型可以雷同,也能夠分歧,每一個如許的變量或數組都稱為構造體的成員(Member)。請看上面的一個例子:
struct stu{ char *name; //姓名 int num; //學號 int age; //年紀 char group; //地點進修小組 float score; //成就 };
stu 為構造體名,它包括了 5 個成員,分離是 name、num、age、group、score。構造體成員的界說方法與變量和數組的界說方法雷同,只是不克不及初始化。
留意年夜括號前面的分號;不克不及少,這是一條完全的語句。
構造體也是一種數據類型,它由法式員本身界說,可以包括多個其他類型的數據。
像 int、float、char 等是由C說話自己供給的數據類型,不克不及再停止分拆,我們稱之為根本數據類型;而構造體可以包括多個根本類型的數據,也能夠包括其他的構造體,我們將它稱為龐雜數據類型或結構數據類型。
構造體變量
既然構造體是一種數據類型,那末便可以用它來界說變量。例如:
struct stu stu1, stu2;
界說了兩個變量 stu1 和 stu2,它們都是 stu 類型,都由 5 個成員構成。留意症結字struct不克不及少。
stu 就像一個“模板”,界說出來的變量都具有雷同的性質。也能夠將構造體比作“圖紙”,將構造體變量比作“零件”,依據統一張圖紙臨盆出來的零件的特征都是一樣的。
你也能夠在界說構造體的同時界說構造體變量:
將變量放在構造體界說的最初便可。
struct stu{ char *name; //姓名 int num; //學號 int age; //年紀 char group; //地點進修小組 float score; //成就 } stu1, stu2;
假如只須要 stu1、stu2 兩個變量,前面不須要再應用構造體名界說其他變量,那末在界說時也能夠不給出構造體名,以下所示:
struct{ //沒有寫 stu char *name; //姓名 int num; //學號 int age; //年紀 char group; //地點進修小組 float score; //成就 } stu1, stu2;
如許做書寫簡略,然則由於沒有構造體名,前面就沒法用該構造體界說新的變量。
實際上講構造體的各個成員在內存中是持續存儲的,和數組異常相似,例如下面的構造體變量 stu1、stu2 的內存散布以下圖所示,共占用 4+4+4+1+4 = 17 個字節。
然則在編譯器的詳細完成中,各個成員之間能夠會存在裂縫,關於 stu1、stu2,成員變量 group 和 score 之間就存在 3 個字節的空白填充(見下圖)。如許算來,stu1、stu2 其實占用了 17 + 3 = 20 個字節。
關於成員變量之間存在“裂痕”的緣由,我們將在《C說話和內存》專題中的《C說話內存對齊,進步尋址效力》一節中具體講授。
成員的獲得和賦值
構造體和數組相似,也是一組數據的聚集,全體應用沒有太年夜的意義。數組應用下標[ ]獲得單個元素,構造體應用點號.獲得單個成員。獲得構造體成員的普通格局為:
構造體變量名.成員名;
經由過程這類方法可以獲得成員的值,也能夠給成員賦值:
#include <stdio.h> int main(){ struct{ char *name; //姓名 int num; //學號 int age; //年紀 char group; //地點小組 float score; //成就 } 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{ char *name; //姓名 int num; //學號 int age; //年紀 char group; //地點小組 float score; //成就 } stu1, stu2 = { "Tom", 12, 18, 'A', 136.5 };
不外全體賦值僅限於界說構造體變量的時刻,在應用進程中只能對成員一一賦值,這和數組的賦值異常相似。
須要留意的是,構造體是一種自界說的數據類型,是創立變量的模板,不占用內存空間;構造體變量才包括了實其實在的數據,須要內存空間來存儲。
以上就是對 C說話構造體材料的整頓,後續持續彌補相干材料,感謝年夜家對本站的支撐!