微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

为什么将一个分配给另一个的方法与在 C++ 中分配两个单独的变量不同?

如何解决为什么将一个分配给另一个的方法与在 C++ 中分配两个单独的变量不同?

所以在图片中,它说问题在于数组的起始地址,因为我们无法更改它。但为什么这仅适用于数组。 int x = 1; 我们可以轻松地说 int y = x; 并且它会起作用。这不会改变变量的内存地址吗?

enter image description here

解决方法

[tl;dr] newValues = oldValues; 是非法的(“不起作用”)的第一个也是唯一的原因是 C++ 标准禁止它。 C++ 中未定义、支持或允许数组赋值,因此任何此类语句都是无效代码。使用内存地址或其他推测来“解释”它的任何其他尝试只会混淆一个简单的事实,即语言的定义决定了语言中什么是合法的,什么是不合法的。

以下内容引用自已发布的“教科书”摘录,我发现它既错误又被误导,因为它看起来像是对 C++ 基础知识的介绍。

不带括号和下标的数组名代表数组的起始内存地址

错了。该名称代表它所表示的变量,它具有 array 类型。虽然在某些上下文中数组可以衰减为指针(“起始内存地址),但数组名称与它的相同肯定是不正确的。起始地址。例如,sizeof oldValuestypeid(oldValues) 都是有效的表达式,如果将 oldValues 替换为其内存地址,则含义将大不相同。

该语句将不起作用,因为您无法更改数组的起始内存地址

不会工作”的说法是正确的,但给出的原因仍然是错误的。没有赋值改变它左边的地址,它只改变它的值。数组赋值不起作用,因为语言没有定义它,没有其他原因。例如,考虑以下内容。

int a[4],b[4];
a = b;  // error,array assignment not allowed

struct { int n[4]; } c,d;
c = d;  // ok,using default copy assignment

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。