c - c中运算符的地址和L值
问题描述
如果我运行以下代码:
int main(){
int x = 0;
int* y = &x;
&x = y;
}
我得到错误:
左值需要作为赋值的左操作数
我理解这意味着当使用 addressof 运算符时,产生的指针不是有效的左值,正如 c 文档中所反映的那样。
我的问题很简单:为什么?
我无法更改指向变量 x 的指针的值的原因是什么?是为了防止程序员犯错,还是从根本上说没有意义(在这种情况下请解释原因。)
解决方案
在这一行:
&x = y;
听起来您想说“我想x
存储在地址中y
”。
- 当您声明一个变量 (
x
) 时,它的地址(您称之为“指针值”)是一个常量值。它不是“左值”。(“l”代表“left”,赋值操作的左边部分,所以是可赋值的。) - 此外,您并不打算自己决定系统在内存中设置数据的位置。
- 另外,您甚至不确定“y”地址是否是您的进程允许写入的已分配位置。
这里有三个不让你这样做的理由。:)
推荐阅读
- python-3.x - 如何在python中修复“找不到此类文件错误”
- microsoft-cognitive - 如何从 Azure 认知服务桌面访问 API 测试控制台?
- angular - 如何修复嵌套树?
- java - 如何正确使用Activity中的界面?
- node.js - 捕获发送到 Messenger 聊天机器人的图像有哪些不同的方法
- asp.net - 位置路径拒绝不会在 system.web 中阻止静态文件夹
- php - 在 laravel 5.8 中仅显示当前经过身份验证的用户订单
- jquery - 为什么我的 PUT 请求会出现 404 状态错误?
- dart - 如何在 Flutter 中实现一个简单的倒数计时器构造函数到应用程序中?
- c# - 如何避免使用 Nest .NET 6.x 将重复项发布到 elasticsearch?