假设我定义了这样的结构:
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会做Memberwise assignment并将Johns的成员值分配给Bob's。
但是数组不能分配给数组,那么“name”数组的赋值是如何工作的呢?
答案 0 :(得分:1)
当C语言首次被抛在一起时,它并不打算成为几十年后仍在使用的强大力量。它的目的是快速轻松地满足一些迫切的需求,但它非常可怕。许多人认为理所当然的功能,例如按值传递结构的能力,或者(如果我记得)甚至直接分配它们的能力都不存在。然而,从一开始就将数组分解为指针是语言的一部分。
当结构在该语言的更高版本中变得更强大时,允许符号struct1 = struct2;
表示从struct2
到struct1
的副本没有问题,因为这样的表达没有'在此之前有任何意义。另一方面,数组类型有自己的预先存在的规则,并且没有办法允许数组赋值像结构赋值一样工作,而不会破坏为fledgeling语言编写的许多程序。
因此,复制包含数组的结构将按照预期复制数组的方式工作,因为只有在“按名称”访问数组时才会将数组分解为指针。如果一个struct包含unsigned char byteArray[64];
,那么从struct的角度来看,它只是一个64字节的blob。如果一个引用theStruct.byteArray
,那么该引用将像数组变量引用一样分解为指针,但是当将theStruct
分配给同一类型的另一个变量时,编译器会忽略内部。