为什么不是这个段错?

时间:2012-08-06 09:24:38

标签: c++ c

  

可能重复:
  Why does this C code work?

为什么这个用于查找结构中字段偏移量的代码不能给出段错误?

#define offset(structName,fieldName) (&((structName *)0)->fieldName)

1 个答案:

答案 0 :(得分:3)

因为它没有访问任何数据。它只是计算一个地址。 尝试执行以下任一操作:

foo = *offset(MyStruct, MyField);
*offset(MyStruct, MyField) = 1234;

你会看到一个美丽的SEGFAULT :-)