【发布时间】:2016-09-09 11:05:39
【问题描述】:
我遇到了一段代码,其中 NULL 被强制转换为结构指针类型 (foo *) 0,并且该指针取消引用成员 ((foo *)0)->m),并使用该 &(((foo *)0)->m)) 的地址并将其类型强制转换为整数获取该成员在结构中的内存索引。((unsigned int)(&(((foo *)0)->m)))。
我还看到这个宏具有通过给出索引来给出偏移量的特定行为。请尝试帮助启发我。感谢输入。
#include <stdio.h>
#define MACRO(m) ((unsigned int)(&(((foo *)0)->m)))
typedef struct
{
int a;
int b;
int c;
int d;
}foo;
int main(void) {
printf("\n %d ", MACRO(c));
return 0;
}
【问题讨论】:
-
你为什么又问完全一样的问题?
-
@LưuVĩnhPhúc 我猜是因为另一个问题是否应该被关闭还有待商榷。
-
虽然我同意不应该关闭原始问题,但正确的方法是尝试重新打开另一个问题,而不是再次询问。
-
这个是未定义的行为。在这种特定情况下,在特定编译器上,使用这些特定设置,您只是(不)幸运没有发生任何不好的事情。
-
请不要重复发布您自己的问题,特别是因为它有一个非常好的标准参考答案。