2010-10-05 289 views
11

如何獲得C中一個結構體中成員的大小?sizeof一個結構體成員

struct A 
{ 
     char arr[64]; 
}; 

我需要類似的東西:

感謝

的sizeof(A :: ARR)

+1

當你試圖'的sizeof(A :: ARR)'發生了什麼事? – pmg 2010-10-05 14:25:40

+0

@pmg'A'不是C中的一個類型 – 2010-10-05 14:28:18

+4

C表示響應'sizeof(A :: arr)'的「語法錯誤」。 C語法中的任何地方都不使用雙冒號。 – 2010-10-05 14:28:24

回答

35
sizeof(((struct A*)0)->arr); 

簡單地說,投一個空指針類型的struct A*,但由於sizeof的操作數未被評估,這是合法的,並且允許您在不創建結構實例的情況下獲取結構成員的大小。

基本上,我們假裝它的一個實例存在於地址0,可用於偏移量和sizeof的確定。

爲了進一步闡述,請閱讀這篇文章:

http://www.embedded.com/design/prototyping-and-development/4024941/Learn-a-new-trick-with-the-offsetof--macro

+4

在Windows中有這個構造的宏('RTL_FIELD_SIZE(type,field)'和Linux(' FIELD_SIZE(t,f)')。 – 2010-10-05 16:13:30

+4

@Michael:當你可以很容易地編寫你自己的便攜式實現時,沒有理由使用非便攜式系統特定的宏 – 2010-10-05 17:00:06

+0

/*嗯,有趣的是,這不適用於抽象結構體/類* /它不適用於同一類中的靜態常量 – 2011-02-03 02:57:17