如果我运行以下代码:
int main(){
int x = 0;
int* y = &x;
&x = y;
}
我知道错误:
左值必须作为赋值的左操作数
我理解这意味着,当使用addressof运算符时,生成的指针不是有效的左值,这反映在c文档中。
我的问题很简单:为什么?
我无法更改指向变量x的指针值的原因是什么?是为了防止程序员犯错误,还是根本没有意义(在这种情况下,请解释原因)
最佳答案
在这一行中:
&x = y;
听起来你想说“我希望
x
存储在y
地址中”。当您声明一个变量(
x
)时,它的地址(您称之为“指针值”)是一个常量值。它不是“左值”。(“l”代表“left”,赋值操作的左半部分,因此是可赋值的。)另外,您不需要决定系统在内存中的数据设置位置。
另外,您甚至不确定“y”地址是允许您的进程写入的分配位置。
有三个理由不让你这么做。:)
关于c - 运算符的地址和c中的L值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/53035475/