C 和 C 中的数组赋值
C 和 C 允许在结构体中按成员方式对数组进行赋值,但一般情况下不允许。这种行为是语言历史演变的结果。
最初,C 中的数组被建模为内存中的指针,称为“熟数组”。当引入结构体时,结构体中的数组会被区别对待以确保内存安全。这允许在结构内按成员方式分配数组,而不会影响与现有代码的兼容性。
相反,C 的原始设计不支持在结构外部分配数组。这是由于担心指针变基以及缺少声明为函数参数的数组的大小信息。为了避免引入错误和兼容性问题,首选使用 memcpy 进行显式赋值。
但是,正如 Luther Blissett 所指出的,C 关于结构赋值的规范显式允许对包含的数组进行成员赋值。这是设计的一个意想不到的副作用,但它被认为是一种促进结构内数据复制而不破坏既定模式的方法。
因此,支持结构内数组的成员分配,但通常不是C 早期设计决策的遗产以及该语言随后的发展,导致了嵌入在结构中的数组和独立使用的数组之间的区别。
以上是为什么我不能在 C 和 C 中直接为数组赋值,但可以在结构体中赋值?的详细内容。更多信息请关注PHP中文网其他相关文章!