1

假设我定义了这样的结构:

struct person
{
    char name [10];
    int  age;
};

并声明了两个人变量:

person Bob;
person John;

其中 Bob.name = "Bob", Bob.age = 30 和 John.name = "John",John.age = 25。我打电话给

Bob = John;

struct person 将执行成员分配并将 Johns 的成员值分配给 Bob 的。

但是数组不能赋值给数组,那么“name”数组的赋值是怎么工作的呢?

4

1 回答 1

1

最初将 C 语言组合在一起时,它并没有打算成为几十年后仍在使用的强大力量。它旨在成为能够快速轻松地满足一些即时需求的东西,但它非常可怕。许多人们认为理所当然的特性,例如通过值传递结构的能力,或者(如果我记得的话)甚至直接分配它们的能力都不存在。然而,将数组分解为指针从一开始就是该语言的一部分。

当结构在后来的语言版本中变得更加强大时,允许符号表示从tostruct1 = struct2;的副本没有问题,因为在此之前这样的表达式没有任何意义。另一方面,数组类型有自己的预先存在的规则,如果不破坏为这门初出茅庐的语言编写的数十个程序,就不可能让数组赋值像结构赋值一样工作。struct2struct1

因此,复制包含数组的结构将按照人们期望复制数组的方式工作,因为只有在“按名称”访问数组时才会将数组分解为指针。如果一个结构包含unsigned char byteArray[64];,从结构的角度来看,这只是一个 64 字节的 blob。如果引用theStruct.byteArray,则该引用将像数组变量引用那样分解为指针,但是当分配theStruct给另一个相同类型的变量时,编译器会忽略内部结构。

于 2012-04-05T23:26:38.183 回答