首页
/
每日頭條
/
圖文
/
c語言結構體怎麼定義
c語言結構體怎麼定義
更新时间:2026-07-10 05:54:10

通過前面的學習,已經知道了C語言當中一個變量也可以存儲多個數據,如數組類型,可以存儲多個相同類型的數據。

但有時候,我們需要在一個變量中存儲多個不同類型的數據。例如一個學生,有姓名、年齡、性别等等。姓名和性别屬于 char 字符類型,年齡則是 int 類型,使用數組顯然是不能的。

接下來,就來學習一下C語言的構造數據類型——結構體。

c語言結構體怎麼定義(從零開始學習C語言構造類型)1

1. 什麼是結構體?

在C語言當中,變量是需要定義數據類型的。諸如 int、char、float 等數據類型,其所聲明的變量,隻能存儲一個數據,被稱之為基本數據類型。

一個變量可以存儲多個數據的,如數組、結構體,這種被稱為構造數據類型,也叫作複雜數據類型。

結構體,是一種程序員可以自定義的數據類型,可以用來存儲多個相同或者不同類型的數據。

2. 結構體的定義

和其他類型一樣,結構體類型也是需要初始化定義的。但不同的是,在此之前結構體還需要進行自定義類型結構的。

定義結構的語法:

struct tag{ Member_list; } Variable_list;

struct 是定義一個結構體的關鍵字,缺少這 struct 這一段是不成立的。

tag 是結構體标簽,也就是這個結構的名稱。

Member_list 是結構體中的成員,每個成員以數據類型和變量名的形式存在。其中,成員的類型可以是基本數據類型,也可以是數組,指針,結構體等等其他類型。

Variable_list 是結構體聲明的變量列表,必須在花括号之後,分号之前。和 tag 兩者之間可以隻存在一個。沒有 tag 的結構體被稱為匿名結構體

在結構體中,花括号不是執行代碼塊,因此後面必須要跟上分号,表示這是一個完整的語句。如果不加上分号,編譯是不會通過的。

3. 結構體變量的定義

第一種,在定義結構體的同時,聲明變量。

struct Student{ char name[10]; int age; char gender[10]; } s1, s2;

定義了 Student 學生結構體類型,其中成員包含了 char 數組類型的姓名和性别以及 int 類型的年齡。末尾聲明了兩個變量,s1,s2。

第二種,是在定義結構體之後,再聲明變量。

struct Student{ ... }; struct Student s1, s2;

定義後的變量聲明,必須要帶上 struct 關鍵字。因為 Student 隻是一個标簽名,帶上 struct 才是一個完整的結構體類型。

可以理解 struct Student 等同于 int、char 這類的數據類型,聲明變量時必須要寫全。

匿名結構體則必須在定義結構體的時候就聲明變量,否則定義的結構就沒有意義了。

struct{ ... } s1, s2;

一般是不建議這種寫法,因為匿名結構體隻有在定義的時候才能聲明變量,也就隻能使用這一次。之後就無法重新聲明新的變量,是一種較為浪費資源的做法。

4. 變量初始化

作為一個數據類型,變量可以在聲明的時候進行初始化。

第一種,在定義結構時聲明變量,并進行初始化。

struct Student{ ... } s1 = {"張三", 15, "男性"};

匿名結構體的初始化方式也是如此,區别在于匿名結構體是不帶上 tag 結構标簽名稱。

第二種,在定義結構後,聲明變量時初始化。

struct Student{ ... }; struct s1 = {"李四", 18, "男性"};

5. typedef類型定義關鍵字

總是要在聲明變量的時候使用 struct,看着就很讨厭,有沒有辦法将這 struct 省略掉呢?

辦法是有的,這裡介紹 C 語言中的一個關鍵字,typedef,類型定義。

C語言允許程序員使用 typedef 關鍵字重新命名自己習慣使用的數據類型名稱,從而代替系統提供的基本數據類型、構造類型等等。

相當于給數據類型取一個别名,就可以用這個别名當作數據類型來聲明變量。

例如,将 int 數據類型取個别名 ZHENGSHU,那我聲明變量的時候可以直接使用 ZHENGSHU 來當作變量聲明的數據類型,而不用 int。

typedef int ZHENGSHU; ZHENGSHU a = 1;

因此,我們就可以通過 typdef 給結構體類型取一個别名。

typedef struct Student{ ... } Sstudent;

需要注意的是,這裡花括号後面所跟随的是别名,而不再是變量名。

定義的 Sstudent 類型等同于 struct Student,接下來我們就可以直接使用這個别名來聲明變量,而不再多寫一個 struct 關鍵字。

Sstudent s1;

同時,typedef 這關鍵字還解決了匿名結構體隻能使用一次的問題。

typedef struct{...} Student; Student s1; Student s2;

6. 訪問結構中的成員

聲明完結構體變量,那麼就要把這個變量拿來用,或者對變量中的某個數據進行修改。

C語言提供給結構體一個運算符,成員訪問運算符(.),可以通過 變量名.成員名 來進行訪問。

Sstudent s1 = {"張三", 19, "男性"}; printf("%s是一位%d歲的%s。", s1.name, s1.age, s1.gender);

運行結果:張三是一位19歲的男性。

10 年後,開辦了一次同學聚會,發現張三竟然變成了一個女人了。

那麼,就要對變量中的數據進行修改校正。

如果左邊的成員是基本數據類型的變量,可以直接使用賦值運算符(=)進行修改。

但如果左邊是個字符數組,這裡就需要引入外部的頭文件(string.h),應用其中的 strcpy 的方法。

#include<string.h> s1.age = 29; strcpy(s1.gender, "女性"); printf("%s是一位%d歲的%s。", s1.name, s1.age, s1.gender);

運行結果:張三是一位29歲的女性。

總結

以上就是關于C語言結構體的基本内容。包括了結構體的含義和作用、結構體的定義使用、結構體變量的定義方式、變量初始化方式、類型定義關鍵詞 typedef 以及訪問結構體中成員的方法。

,
Comments
Welcome to tft每日頭條 comments! Please keep conversations courteous and on-topic. To fosterproductive and respectful conversations, you may see comments from our Community Managers.
Sign up to post
Sort by
Show More Comments
推荐阅读
蘇聯為什麼能反攻莫斯科(損失慘重的蘇聯)
蘇聯為什麼能反攻莫斯科(損失慘重的蘇聯)
  1941年6月22日淩晨3點15分,德軍以總兵力550多萬人的空前作戰規模,在4900餘架戰機、3700輛坦克、 47000門大炮、190餘艘艦艇的配合下,對蘇聯發動了代号為“巴巴羅薩”的軍事打擊,襲擊了蘇聯西部邊境的幾個大軍區。德國空軍首先突襲了西部邊境的蘇聯空軍機場,然後大批德軍裝甲坦克集群在寬大的正面向蘇聯發起了快速攻擊,蘇軍被迫應戰……     ...
2026-07-10
高分爆笑喜劇(年度爆笑喜劇回歸)
高分爆笑喜劇(年度爆笑喜劇回歸)
  來源于:黃河票務APP   三個小時笑死的年度喜劇,劇情高潮叠起、笑點密集如掃雷,屯好的成噸包袱,全場無尿點,節奏完全流暢,浪到飛起,讓你整個笑完全程,絕對值回票價!      喜劇片《糊塗戲班》最早是由英國著名小說家、戲劇家邁克爾·弗萊恩所創作的,于1982年在倫敦首演,它一問世就引起了觀衆的熱烈反應。   該劇後來多次被改編為電視劇和複排,成為倫敦西...
2026-07-10
灌籃高手櫻木到底厲不厲害(櫻木的籃闆稱得上全日本第一嗎)
灌籃高手櫻木到底厲不厲害(櫻木的籃闆稱得上全日本第一嗎)
  在《灌籃高手》這部經典熱血漫中,有很多被争論的話題,其中一項就是關于湘北籃球隊的櫻木花道籃闆球能力的。很多小夥伴們在看完《灌籃高手》劇情之後,都覺得櫻木花道擁有過人的彈跳能力,而且還有永不衰竭的體力,再加上一來就以新人的身份打敗了籃球隊老大赤木剛憲,想必天賦也是超強的,加上後期的努力,想要用籃闆球稱霸全國一定不是夢想!不得不說,這是一個非常美好的理想,不...
2026-07-10
暴雨期間河堤撈魚(撈了鯉魚和草魚30多條)
暴雨期間河堤撈魚(撈了鯉魚和草魚30多條)
  連日來,不少地方連降大雨,河道漲水,田間地頭來了不少大魚,附近村民随手撈魚,特别開心。   鯉魚、草魚、鲢魚、鳙魚……在廣東清遠,田間地頭出現了魚群。有網友在朋友圈發了不少照片,展示捕撈的魚類。      這些魚類,大部分是從魚塘裡跑出來的,有鯉魚、鲫魚、黑魚及四大家魚等,當地養殖戶損失巨大。   在農村,養殖業的風險比較大,因為水火無情。特别到了梅雨季...
2026-07-10
瓊瑤眼中的24位絕世美人(她美貌脫俗如畫中仙子)
瓊瑤眼中的24位絕世美人(她美貌脫俗如畫中仙子)
  提到蔣勤勤,很多人的第一印象可能是:“瓊瑤女郎”,早期瓊瑤的光環讓大多數人都隻注意到了蔣勤勤的美貌,她是真的非常好看,以至于忽略了蔣勤勤的演技,但是她早期演過的武俠或者言情劇,由于她有那種剛烈氣質的古典美,令她可以輕而易舉地駕馭起一些形象,像:練霓裳,趙繡雲,第二夢,明月,沈心慈,玉嬌龍,穆念慈,這些角色上沒有設定重複,也是演什麼就是像什麼,沒有在演自己...
2026-07-10
Copyright 2023-2026 - www.tftnews.com All Rights Reserved