gpt4 book ai didi

arrays - 为什么数组不可赋值?

转载 作者:行者123 更新时间:2023-12-05 01:21:47 26 4
gpt4 key购买 nike

<分区>

我知道 C 标准禁止将数组用作可修改的左值,即在赋值的左侧:

int lhs[4], rhs[4] = {0, 1, 2, 3};
lhs = rhs; /* illegal! */

现在,我一直想知道为什么会这样。我可以看到上面的语句(以及任何其他写入数组的赋值)被定义为等同于

memcpy((void *) lhs, (void *) rhs, sizeof(lhs));

并将确保 rhs 足够大的负担强加给用户,但并未决定是否应如此。

但是,一个非常相似的例子确实工作得很好:

struct { int a[4]; } lhs, rhs = {{0, 1, 2, 3, 4}};
lhs = rhs;

只需将数组包装在一个结构体中,我们就可以获得上述行为,即赋值 lhs = rhs 等价于:

memcpy((void *) &lhs, (void *) &rhs, sizeof(lhs));

这种(我觉得)不一致的原因是什么?允许将数组赋值解释为 memcpy 有什么问题吗?

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com