c - c 中运算符的地址和左值

标签 c pointers memory-address

如果我运行以下代码:

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 中”。

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

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

关于c - c 中运算符的地址和左值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53035475/

相关文章:

c - 为什么在 C 中有两种不同的初始化指针的方法

C++:误解内存地址和指针的复制值

c - 如何在 GTK 中使用剪贴板?

c - 正在重新分配的指针未分配

pointers - 通过 `mem::transmute()` 指针存储泛型

c - 内存地址和数据类型简介

c++ - 如果加载到应用程序,DLL 中的函数地址是否可以更改?

c - 错误 LNK2019 : unresolved external symbol _vfork referenced in function _main

c++ - 如何从不同的函数而不是 main() 开始执行 c/c++ 中的程序

结构中的 C 字符串