什么(std :: size_t)&((结构*)0) - >最后做什么?

时间:2014-10-18 10:52:02

标签: c

我最近遇到过这段代码并认为这有点矫枉过正。

struct Structure {
  unsigned int first;
  unsigned int last;
};
(std::size_t)&((Structure *)0)->last; // 4

所以我想知道我是否可以安全地做到:

sizeof(unsigned int); // 4

而不是:

(std::size_t)&((Structure *)0)->last; // 4

或者代码正在做什么,如果它好得多。

修改

https://stackoverflow.com/a/1379370/1001563中指出的代码或多或少与offsetof相符 如果您知道自己在寻找什么,那就找到答案而不必询问。感谢@VladfromMoscow

1 个答案:

答案 0 :(得分:3)

程序通常会被更改。所以最好使用一般方法。例如,首先可以更改数据成员的类型,或者在数据成员最后一次可以添加一个数据成员之前。 请注意,在<stddef.h>(或C ++中的<cstddef>)中定义的C中已存在类似的宏

offsetof(type, member-designator)