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)總結
sizeof宏/字面量得展開後類型大小,字符字面量在C中是int- 空結構體大小:GCC=0,MSVC=1,跨平台代碼勿依賴具體值
- 柔性數組是C99標準變長結構體方案,配合
malloc動態分配