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

C 語言 `sizeof` 計算數組長度誤區:得到字節數而非元素個數

     編輯:程式設計疑難解答

初學者常寫 `sizeof(arr)` 期望得到元素個數,實則返回**數組佔用總字節數**。正確長度需除以單個元素大小。

錯誤與修正

int aaaaa[10];
printf("%d\n", sizeof(aaaaa));        // ❌ 輸出 40 (10 * sizeof(int)=4)
printf("%d\n", sizeof(aaaaa) / sizeof(int));  // ✅ 輸出 10
printf("%zu\n", sizeof(aaaaa) / sizeof(aaaaa[0])); // ✅ 通用寫法,不依賴類型

核心規則

表達式結果說明
`sizeof(arr)`總字節數僅在數組定義作用域內有效
`sizeof(arr[0])`單元素字節數等價於 `sizeof(int)`
`sizeof(arr)/sizeof(arr[0])`元素個數**標準計算長度宏**
`sizeof(ptr)`指針大小 (4/8)指向數組的指針退化後失去長度信息

經典宏定義

#define ARRAY_LEN(arr) (sizeof(arr) / sizeof((arr)[0]))

// 使用
int a[10];
double b[5];
printf("%zu, %zu\n", ARRAY_LEN(a), ARRAY_LEN(b));  // 10, 5

⚠️ 陷阱:函數參數退化

void foo(int arr[]) {
    // ARRAY_LEN(arr) 這裡失效!arr 已退化為指針
    // 必須額外傳長度:void foo(int arr[], size_t len)
}
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved