如果我运行以下代码:
int main(){
int x = 0;
int* y = &x;
&x = y;
}
我得到了错误:
需要左值作为赋值的左操作数
我理解这意味着在使用addressof运算符时,生成的指针不是有效的左值,如c文档中所反映。
我的问题很简单:为什么?
我不能更改指向变量x的指针的值的原因是什么?是为了防止程序员犯错误,还是从根本上说不通(在这种情况下,请解释原因)。
答案 0 :(得分:2)
在这一行:
&x = y;
听起来像是您想说“我希望将x
存储在地址y
中”。
x
)时,其地址(称为“指针值”)为常数。它不是“左值”。 (“ l”代表“左侧”,是分配操作的左侧部分,因此可以分配。)此处不允许您这样做的三个原因。 :)
答案 1 :(得分:1)
这里&
运算符为您提供了变量x
的地址,并且您试图为该地址分配某些内容,但这是不可能的,这没有任何意义。
如果要更改存储在x
中的值,只需为其赋值:
x = 5;
如果您有指针(int*
)y
,并且想要将其值分配给x
,请使用*
运算符获取值 y指向(存储在该地址中)并将其分配给x
:
x = *y;
如果要将指针y
分配给x
,则不可能。为此,请使用其他Poiner。
int *y1 = y;
答案 2 :(得分:-1)
在您的代码中
&x = y
此行显示错误,因为&x是常量指针,因此在初始化后无法更改