程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> 關於C++ >> C說話 構造體(Struct)詳解及示例代碼

C說話 構造體(Struct)詳解及示例代碼

編輯:關於C++

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說話構造體材料的整頓,後續持續彌補相干材料,感謝年夜家對本站的支撐!

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved