Arrays 数组上的结构赋值运算符
假设我定义了这样一个结构:Arrays 数组上的结构赋值运算符,arrays,struct,assignment-operator,Arrays,Struct,Assignment Operator,假设我定义了这样一个结构: 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”数组的分配是如何工作
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”数组的分配是如何工作的呢 当C语言最初被组合在一起时,它并不打算成为一种强大的力量,几十年后仍在使用。它的目的是能够快速、轻松地满足一些眼前的需求,但它非常可怕。人们认为理所当然的许多特性,例如通过值传递结构的能力,或者(如果我记得的话)甚至直接分配它们的能力都不存在。然而,数组到指针的分解从一开始就是语言的一部分 当结构在语言的后期版本中变得更强大时,允许符号
struct1=struct2
表示从struct2
到struct1
的副本,因为这样的表达式在此之前没有任何意义。另一方面,数组类型有它们自己的预先存在的规则,如果不破坏为这种初出茅庐的语言编写的几十个程序,就无法允许数组赋值像结构赋值一样工作
因此,复制包含数组的结构的工作方式将与复制数组的工作方式相同,因为只有在“按名称”访问数组时,才会将数组分解为指针。如果结构包含
无符号字符byteArray[64]代码>,从结构的角度来看,这只是一个64字节的blob。如果引用结构byteArray
,该引用将像数组变量引用一样分解为指针,但是当将结构赋给同一类型的另一个变量时,编译器会忽略内部结构。当C语言第一次抛出时,它并不是要成为一种强大的力量,几十年后仍在使用。它的目的是能够快速、轻松地满足一些眼前的需求,但它非常可怕。人们认为理所当然的许多特性,例如通过值传递结构的能力,或者(如果我记得的话)甚至直接分配它们的能力都不存在。然而,数组到指针的分解从一开始就是语言的一部分
当结构在语言的后期版本中变得更强大时,允许符号struct1=struct2
表示从struct2
到struct1
的副本,因为这样的表达式在此之前没有任何意义。另一方面,数组类型有它们自己的预先存在的规则,如果不破坏为这种初出茅庐的语言编写的几十个程序,就无法允许数组赋值像结构赋值一样工作
因此,复制包含数组的结构的工作方式将与复制数组的工作方式相同,因为只有在“按名称”访问数组时,才会将数组分解为指针。如果结构包含无符号字符byteArray[64]代码>,从结构的角度来看,这只是一个64字节的blob。如果引用结构byteArray
,该引用将像数组变量引用一样分解为指针,但是当将结构分配给相同类型的另一个变量时,编译器会忽略内部