首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

C 語言聯合體詳解:定義語法、內存佈局、嵌套結構與鏈表動態分配

     編輯:關於C語言

聯合體定義與聲明

union perdata {
    int class;
    char office[10];
};
union perdata x, y;           // 先定義後聲明
union perdata { ... } x, y;   // 定義同時聲明
union { ... } x, y;           // 匿名聯合直接聲明

內存佈局核心差異

特性結構體聯合體
成員共存同時存在互斥,同一時刻僅一成員有效
大小計算所有成員大小之和(含對齊)最大成員大小(含對齊)
示例大小int(2) + office[10] = 12+max(2, 10) = 10 字節

圖示:賦 int 用 2 字節,賦 office 用 10 字節,共用同一塊內存區域。

賦值與訪問規則

  • 只能訪問成員:x.class、x.office
  • 不可整體賦值/初始化:x = 5; ❌
  • 單次賦值:x.class = 1; 後再 x.office = "abc"; 會覆蓋前值
  • 成員運算符:.(變量)、->(指針)

實戰:教師/學生通用表格(聯合嵌套結構)

struct {
    char name[10];
    int age;
    char job;           // 's' 學生 / 't' 教師
    union {
        int class;      // 學生班級
        char office[10]; // 教師教研室
    } depa;
} body[2];

輸入時根據 job 決定讀取 depa.class 或 depa.office;輸出同理分支。注意:數組類型成員(name、office)scanf 時不加 &。

本章小結:結構 vs 聯合 vs 鏈表

  1. 結構/聯合均為構造類型,支援三種聲明方式、成員運算符、嵌套組合
  2. 結構成員並存,聯合互斥;結構可作函數參數/返回值,聯合不可(但可用指針/數組間接實現)
  3. 鏈表 = 結構 + 指針域(next),實現動態存儲:
    struct node { int data; struct node *next; };
  4. 鏈表基本操作:建立、遍歷查找、插入節點、刪除節點
  5. 進階:雙向鏈表(prev/next)、循環鏈表(尾指向頭)
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved