为什么数组不能在C/C++中赋值?

Kap*_*chu 14 c c++ arrays struct copy-assignment

可以将结构分配给另一个,这会导致将所有值从struct复制到另一个:

struct
{
    int a, b, c;
} a, b;

...
a = b;
Run Code Online (Sandbox Code Playgroud)

但为什么数组不能像这样分配:

int a[3], b[3];
...
a = b;
Run Code Online (Sandbox Code Playgroud)

因为,严格来说,结构只是具有可变大小元素的数组,那么为什么不允许这样呢?无论如何,这种任务尚未使用.当然,似乎只涉及地址,但可以轻松地复制数组("静态").

hac*_*cks 9

引用这个答案:

以这样的方式编写C,即在计算数组表达式时计算第一个元素的地址.

就是为什么你不能做的事情

int a[N], b[N];
a = b;
Run Code Online (Sandbox Code Playgroud)

因为这两个a并且在该上下文中b评估指针 ; 它相当于写作3 = 4.内存中没有任何内容实际存储数组中第一个元素的地址; 编译器只是在翻译阶段1中计算它.


1.重点是我的.

  • 他询问决定背后的原因,而不是规则. (12认同)
  • 关键在于它们肯定可以是左值,它不会违反物理定律,但它们不是.OP希望知道_why_做出了决定. (4认同)
  • @haccks从链接的答案中,我们可以看到,在过去,您只是以更直接的方式提出了与OP基本相同的问题.鉴于此,在我看来,你应该知道比提供非解释更好(其他人已经描述了为什么最初的答案是非解释).你做了*没有*我的downvote,但我将这个评论作为一个友好和一般性的建议,我们应该更加小心,不要给出对OP毫无意义的答案(即使它们对我们有意义这一刻). (3认同)
  • 他不是在问为什么按照语言规范这是非法的。他在问为什么按原样设计语言。 (2认同)