我在结构 here 上问过类似的问题但我试图弄清楚 C 如何处理诸如分配变量之类的事情,以及如果它们在功能上相同,为什么不允许将它们分配给彼此。
假设我有两个数组:
int x[10];
int y[10];
为什么 x = y 不能编译?如果它们都是这样的相同“签名”,那么你不应该能够来回分配它们吗?
我能否以允许我在 C 中执行的方式声明这些?对我来说,您能够做到这一点很有意义,但也许有一种方法可以做到这一点?结构的 Typedef 似乎是解决方案,数组声明和赋值是否相同?
非常感谢你们的帮助,我是 Stackoverflow 的新手,但到目前为止它对我来说是一个非常好的资源!
最佳答案
简单地说,数组是不可赋值的。它们是“不可修改的左值”。这当然引出了一个问题:为什么?有关详细信息,请参阅此问题:
Why does C++ support memberwise assignment of arrays within structs, but not generally?
数组不是指针。 x
此处确实指的是数组,尽管在许多情况下这种“衰减”(被隐式转换)指向其第一个元素的指针。同样,y
也是数组的名称,而不是指针。
您可以在结构中进行数组赋值:
struct data {
int arr[10];
};
struct data x = {/* blah */};
struct data y;
y = x;
但是你不能直接用数组来做。使用 memcpy
。
关于C数组声明和赋值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59433435/