sizeof结构成员

xyz*_*yzt 13 c sizeof

如何在C中获取结构中成员的大小?

struct A
{
        char arr[64];
};
Run Code Online (Sandbox Code Playgroud)

我需要这样的东西:

的sizeof(A :: ARR)

谢谢

wkl*_*wkl 41

sizeof(((struct A*)0)->arr);
Run Code Online (Sandbox Code Playgroud)

简而言之,将一个空指针强制转换为类型struct A*,但由于操作数sizeof未被计算,这是合法的,并且允许您在不创建结构实例的情况下获取struct成员的大小.

基本上,我们假装它的一个实例存在于地址0并且可以用于偏移和sizeof确定.

要进一步阐述,请阅读本文:

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

  • 在Windows中有这种构造的宏(`RTL_FIELD_SIZE(type,field)`和Linux(`FIELD_SIZE(t,f)`). (4认同)
  • @Michael:当您可以轻松编写自己的便携式实现时,没有理由使用非便携式系统特定的宏. (4认同)