((struct name*)0) - > member)在C中做什么?

kri*_*rav 22 c struct pointers

((struct name*)0) - > member)在C中做什么?

我遇到的实际C语句是这样的:

(char *) &((struct name *)0)->member)
Run Code Online (Sandbox Code Playgroud)

das*_*ght 25

这是获取被struct调用成员的偏移量的技巧member.这种方法背后的想法是让编译器计算member假设结构本身位于地址零的地址.

使用offsetof提供了一种更易读的语法替代方法:

size_t offset = offsetof(struct name, member);
Run Code Online (Sandbox Code Playgroud)

  • 你实际上并没有解除它的引用.仅仅获得地址. (3认同)

hac*_*cks 6

(struct name *)0正在0转向指针struct name.
&((struct name *)0)->member)得到会员的地址member.
(char *) &((struct name *)0)->member)将该地址转换为char *.

如果有人认为上面的表达式是解引用NULL指针,那么请注意这里没有解除引用.这一切都是为了获得会员的地址number.

  • @CoolGuy - 不,因为`&struct name`不是合法的C,因为你不能获取类型的地址. (2认同)

Ian*_*Ian 5

(struct name*)0 给你一个结构指针.

((struct name*)0)->member 为您提供指针指向的结构的成员.

添加&为您提供该成员的地址,最后

(char *) 是将获取的地址强制转换为char指针.