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

why is the method of assigning one to another is different from assigning two individual variables in C++?

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

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

以下内容摘自已发布的“教科书”摘录,我发现这些内容看起来是 C++ 基础知识的介绍,既错误又误导。

the name of an array without the brackets and subscript stands for the array's starting memory address

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

the statement will not work because you cannot change the starting memory address of an array

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

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