【发布时间】:2020-12-29 12:59:13
【问题描述】:
我一直在努力理解下面的 C 代码:
struct s {
char m1;
char m2;
};
int main()
{
/* This will print 1 */
printf("%d\n", &((struct s*)0)->m2);
}
下面的部分在稍作修改后似乎有点混乱:
&((struct s*)0)->m2
在编译和运行初始代码时,我得到的答案是 1,这是我希望得到的。
我修改了代码,将&((struct s*)0)->m2 替换为
&((struct s*)0),然后我收到一条错误消息,提示“需要左值作为一元 '&' 操作数”。
问题:在原始代码部分&((struct s*)0)->m2 中,& 的参数不是右值吗?如果是,那为什么编译成功,而修改&((struct s*)0)的情况下却没有?
【问题讨论】: