我一直空指针玩弄并创造了这个例子:GCC 2.9和“左值要求作为分配的左操作数”
#include <stdio.h>
struct intint {
int a;
int b;
};
struct intshortshort {
int a;
short b;
short c;
};
void fill_me(struct intint **pii, void *piss)
{
(void*)*pii = piss; // Question about this line?
}
int main()
{
struct intint *pii = NULL;
struct intshortshort iss;
iss.a = iss.b = iss.c = 13;
fill_me(&pii, &iss);
printf("%d..%d\n", pii->a, pii->b);
return 0;
}
问:
当我使用gcc版本2.95。 4一切编译和按预期工作,但gcc版本4.7.3给了我以下错误:
void_pointer.c:16:17: error: lvalue required as left operand of assignment
是否有一个原因,添加(无效*)到左值是不允许的了吗?
编辑:谢谢你的回答,我想我明白了这个问题,但是问题“为什么它一开始就没问题?”仍然很有趣。
铸造的结果是不是左值,除非它是一个参考。例如,http://coliru.stacked-crooked.com/a/61ba4d86f65eaa3e – chris
@chris不,铸造的结果不是左值。你可能会想到另一种编程语言。 –
@PascalCuoq,原谅我,当我发表评论时,我认为这被标记为C++。我很确定我只是疯了。 – chris