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