首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

C 語言:如何獲取未填滿整型數組的有效元素個數

     編輯:程式設計綜合問答

核心結論

C 語言數組不記錄長度信息,編譯器僅分配連續內存。對於 `int a[10];`,若未填滿,無法直接知道有效元素個數。

常見解決方案

  1. 哨兵值法:初始化數組為特殊值(如 `INT_MIN`、`0xFFFFFFFF` 或業務上不可能出現的值),遍歷統計非哨兵值個數。缺點:數據範圍不可包含哨兵值。
  2. 結構體封裝:定義結構體同時存儲數組與當前長度:
    typedef struct {
        int data[10];
        size_t len;
    } IntArray;
    
    這是工程實踐中最推薦的方式。
  3. 動態分配 + 長度變量:使用 `malloc` 分配內存,額外維護 `size` 變量。
  4. 標準庫替代:C++ 直接用 `std::vector`,C 可參考開源動態數組實現(如 `stb_ds.h`)。

避坑指南

  • 切勿嘗試用 `sizeof(a)/sizeof(a[0])` 獲取有效長度,它永遠返回編譯期定義的容量(此處為 10)。
  • 字符串(`char[]`)例外:以 `\0` 結尾,可用 `strlen` 獲取有效長度。

C 語言數組無長度信息,哨兵值法、結構體封裝長度、動態數組最佳實踐。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved