C 数组声明和赋值?

2024-04-13

我问过关于结构的类似问题here https://stackoverflow.com/questions/744477/assignment-and-structs-in-c但我试图弄清楚 C 如何处理分配变量之类的事情,以及为什么如果它们功能相同,则不允许将它们分配给彼此。

假设我有两个数组:

int x[10];  
int y[10];  

为什么 x = y 无法编译?如果它们都是相同的“签名”,那么您不应该能够来回分配它们吗?

我可以以允许我在 C 中执行此操作的方式声明这些吗?对我来说,你能够做到这一点是有道理的,但也许有一种方法可以做到这一点?结构的 Typedef 似乎是解决方案,数组声明和赋值是否相同?

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


简而言之,数组是不可赋值的。它们是“不可修改的左值”。这当然引出了一个问题:为什么?请参考这个问题了解更多信息:

为什么 C++ 支持结构体中数组的成员分配,但一般不支持? https://stackoverflow.com/questions/3437110/why-does-c-support-memberwise-assignment-of-arrays-within-structs-but-not-gen

数组不是指针。 x here does引用一个数组,尽管在许多情况下,这个“衰减”(隐式转换)为指向其第一个元素的指针。同样地,y太是数组的名称,而不是指针。

您可以在结构中进行数组分配:

struct data {
    int arr[10];
};

struct data x = {/* blah */};
struct data y;
y = x;

但你不能直接用数组来做到这一点。使用memcpy.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C 数组声明和赋值? 的相关文章

随机推荐