C数组声明和赋值?

Mit*_*rax 15 c arrays variable-assignment

我问过的结构类似的问题在这里,但我试图找出ç如何处理像变量赋值的东西,为什么不允许将它们分配到海誓山盟,如果他们在功能上是相同的.

可以说我有两个数组:

int x[10];  
int y[10];  
Run Code Online (Sandbox Code Playgroud)

为什么x = y不能编译?如果它们都是相同的"签名",那么你不应该来回分配它们吗?

我是否可以通过允许我在C中执行此操作的方式声明这些内容?你能够做到这一点对我有意义,但也许有办法可以做到这一点?结构的Typedef似乎是解决方案,它对于数组声明和赋值是否相同?

我感谢你们的帮助,我是Stackoverflow的新手,但到目前为止它对我来说是一个非常好的资源!

小智 24

简单地说,数组不可分配.它们是"不可修改的左值".这当然引出了一个问题:为什么?有关更多信息,请参阅此问题:

为什么C++支持在结构中成员分配数组,但一般不支持?

数组不是指针. x这里确实引用了一个数组,尽管在很多情况下这会"衰减"(被隐式转换)到指向其第一个元素的指针.同样,y数组的名称也是指针.

你可以在结构中进行数组赋值:

struct data {
    int arr[10];
};

struct data x = {/* blah */};
struct data y;
y = x;
Run Code Online (Sandbox Code Playgroud)

但你无法直接使用数组.使用memcpy.

  • "数组的名称实际上是该数组的第一个元素的地址.\你在这里提供的示例代码试图分配给不是l值的东西.":为了后代,我以为我'请注意,这些来自最高投票答案的句子都是错误的.首先,数组的名称绝对*不是*指针(例如think sizeof()),它在很多情况下简单地衰减到指针.其次,数组名称*是左值,而不是可修改的左值. (6认同)
  • 我高兴地回答这个问题.它是最高投票和接受,但包含不正确的信息,用户很久没有了.希望这可以解决问题. (2认同)