回答
sizeof(((struct A*)0)->arr);
簡單地說,投一個空指針類型的struct A*
,但由於sizeof
的操作數未被評估,這是合法的,並且允許您在不創建結構實例的情況下獲取結構成員的大小。
基本上,我們假裝它的一個實例存在於地址0,可用於偏移量和sizeof
的確定。
爲了進一步闡述,請閱讀這篇文章:
在Windows中有這個構造的宏('RTL_FIELD_SIZE(type,field)'和Linux(' FIELD_SIZE(t,f)')。 – 2010-10-05 16:13:30
@Michael:當你可以很容易地編寫你自己的便攜式實現時,沒有理由使用非便攜式系統特定的宏 – 2010-10-05 17:00:06
/*嗯,有趣的是,這不適用於抽象結構體/類* /它不適用於同一類中的靜態常量 – 2011-02-03 02:57:17
- 1. C,結構的第一個成員
- 2. 夏普體系結構成員資格
- 3. 計算sizeof結構
- 4. 結構爲的sizeof
- 5. 調用成員函數內的成員結構體
- 6. 的sizeof結構的sizeof VS型
- 7. 結構類成員
- 8. 在一個C結構中的一個TCHAR成員 - 如何動態分配成員和結構數組?
- 9. 結構體中的字符數組成員 - 將值複製到兩個成員
- 10. 將成員的所有權從一個結構移到另一個結構?
- 11. GoCSV:將2個csv列連接成一個結構成員
- 12. 用另一個結構體初始化一個結構體
- 13. 結構在C,其成員也結構
- 14. 用一個包含結構體的結構打包一個結構體
- 15. 陣列的結構和sizeof
- 16. 的hLen和sizeof(結構IP)
- 17. 無效的sizeof()結構,
- 18. 中SizeOf動態結構
- 19. 的sizeof(結構)混淆
- 20. 需要「的BindingList」一個結構的一個組合框成員
- 21. 如何更改結構體指針的單個成員的值?
- 22. 修改單個結構成員
- 23. C結構 - 合法成員?
- 24. 結構成員語法
- 25. C動態成員結構
- 26. 結構成員的大小
- 27. 結構成員初始化
- 28. 結構成員初始化
- 29. 枚舉結構的成員?
- 30. C++結構數據成員
當你試圖'的sizeof(A :: ARR)'發生了什麼事? – pmg 2010-10-05 14:25:40
@pmg'A'不是C中的一個類型 – 2010-10-05 14:28:18
C表示響應'sizeof(A :: arr)'的「語法錯誤」。 C語法中的任何地方都不使用雙冒號。 – 2010-10-05 14:28:24