C数组声明和赋值?

标签 c arrays variable-assignment

我在结构 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/

相关文章:

c - MinGW 库问题

objective-c - TWIN PRIMES BETWEEN 2 VALUES 错误的结果

c - 当需要整数输入时处理 "non-numerical characters"

c - .c 中的变量更改值不正确

c - Magickwand C 改变图像颜色

javascript - 是否有任何内置函数,如在 javascript 中查找所有?

java - 如何将一行从二维数组复制到另一个

javascript - 设置一个不在另一个数组中的元素数组

C++ 指针赋值(指向 vector )

python - 构建分配矩阵 - Python