首页 > 解决方案 > c中运算符的地址和L值

问题描述

如果我运行以下代码:

int main(){
    int x = 0;
    int* y = &x;
    &x = y;
}

我得到错误:

左值需要作为赋值的左操作数

我理解这意味着当使用 addressof 运算符时,产生的指针不是有效的左值,正如 c 文档中所反映的那样。

我的问题很简单:为什么?

我无法更改指向变量 x 的指针的值的原因是什么?是为了防止程序员犯错,还是从根本上说没有意义(在这种情况下请解释原因。)

标签: cpointersmemory-address

解决方案


在这一行:

&x = y;

听起来您想说“我想x存储在地址中y”。

  1. 当您声明一个变量 ( x) 时,它的地址(您称之为“指针值”)是一个常量值。它不是“左值”。(“l”代表“left”,赋值操作的左边部分,所以是可赋值的。)
  2. 此外,您并不打算自己决定系统在内存中设置数据的位置。
  3. 另外,您甚至不确定“y”地址是否是您的进程允许写入的已分配位置。

这里有三个不让你这样做的理由。:)


推荐阅读