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

C語言細節29:宏大小、空結構體大小、柔性數組

     編輯:關於C語言

C語言細節29:宏大小、空結構體大小、柔性數組

1. sizeof 作用於宏/字面量


2. 空結構體大小:編譯器相關

struct Flex {
    int len;
    int data[];  // 柔性數組:必須是最後一個成員,前面至少有一個其他成員
};

sizeof(struct Flex);  // 不包含data[]大小,等於offsetof(data)

struct Flex *p = malloc(sizeof(struct Flex) + 100 * sizeof(int));
p->len = 100;
p->data[0] = 42;  // 使用動態分配的額外空間

特點:
• data[]不佔用結構體大小
• 配合malloc分配變長內存,實現變長結構體
• C99標準特性,替代舊式int data[0]或int data[1]技巧

驗證輸出

N = 4
num 5 memery = 4
char 'd' = 4
STR = 5
a = 0   (GCC/MinGW 下空結構體大小為0)
柔性數組測試
sizeof(te) = 4
p->a[0] = 13
sizeof(p) = 8  (指針大小,結構體大小仍為4)

總結

  1. sizeof宏/字面量得展開後類型大小,字符字面量在C中是int
  2. 空結構體大小:GCC=0,MSVC=1,跨平台代碼勿依賴具體值
  3. 柔性數組是C99標準變長結構體方案,配合malloc動態分配
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved