如果我运行以下代码:

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/

10-16 18:01