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

C語言結構體與位域深度解析:從基礎語法到二叉樹與位操作實戰

     編輯:Java 相關知識

結構體基礎語法

struct TagName {
    type member1;
    type member2;
    // ...
};
struct TagName varName;           // 聲明變量
struct TagName var = {val1, val2}; // 初始化
struct TagName *ptr = &var;       // 指針
ptr->member1;                     // 指針訪問成員

自引用結構體:二叉樹節點實現

struct TreeNode {
    char *word;           // 單詞文本
    int count;            // 出現次數
    struct TreeNode *left;  // 左子節點
    struct TreeNode *right; // 右子節點
};

配合遞歸插入與中序遍歷,可高效完成詞頻統計(見完整代碼示例)。

位域:緊湊存儲標誌位

struct Flags {
    unsigned int is_keyword : 1;
    unsigned int is_extern  : 1;
    unsigned int is_static  : 1;
} flags;

// 操作示例
flags.is_extern = 1;   // 置位
flags.is_static = 0;   // 清位

優勢: 編譯器自動處理位掩碼,代碼可讀性遠高於手工宏定義。

聯合體與枚舉補充

  • union:多成員共享內存,用於類型轉換或節省空間
  • enum:命名常量集合,增強代碼語義

完整詞頻統計程式架構

  1. getword():從輸入流提取單詞(處理標點、大小寫)
  2. addtree():遞歸構建二叉搜索樹,統計詞頻
  3. treeprint():中序遍歷輸出有序統計結果
  4. 內存管理:talloc() 分配節點,strdup2() 複製字符串

最佳實踐提醒

  • 結構體成員對齊可能影響大小,使用 #pragma pack 謹慎控制
  • 位域跨平台行為差異(如位序),跨平台項目建議改用手工位掩碼
  • 柔性數組成員(C99)可用於變長結構體
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved