首页 >后端开发 >C++ >为什么我不能在 C 和 C 中直接为数组赋值,但可以在结构体中赋值?

为什么我不能在 C 和 C 中直接为数组赋值,但可以在结构体中赋值?

Mary-Kate Olsen
Mary-Kate Olsen原创
2024-12-05 20:08:15728浏览

Why Can't I Directly Assign Arrays in C and C  , But I Can Within Structs?

C 和 C 中的数组赋值

C 和 C 允许在结构体中按成员方式对数组进行赋值,但一般情况下不允许。这种行为是语言历史演变的结果。

最初,C 中的数组被建模为内存中的指针,称为“熟数组”。当引入结构体时,结构体中的数组会被区别对待以确保内存安全。这允许在结构内按成员方式分配数组,而不会影响与现有代码的兼容性。

相反,C 的原始设计不支持在结构外部分配数组。这是由于担心指针变基以及缺少声明为函数参数的数组的大小信息。为了避免引入错误和兼容性问题,首选使用 memcpy 进行显式赋值。

但是,正如 Luther Blissett 所指出的,C 关于结构赋值的规范显式允许对包含的数组进行成员赋值。这是设计的一个意想不到的副作用,但它被认为是一种促进结构内数据复制而不破坏既定模式的方法。

因此,支持结构内数组的成员分配,但通常不是C 早期设计决策的遗产以及该语言随后的发展,导致了嵌入在结构中的数组和独立使用的数组之间的区别。

以上是为什么我不能在 C 和 C 中直接为数组赋值,但可以在结构体中赋值?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn