7.1.3 结构体变量的初始化与赋值
在定义结构体变量时,可以对其进行初始化。结构体变量的初始化方式与数组类似,使用大括号将初始值列表括起来。不同的是,列表中初始值的类型和顺序要与结构体成员的类型和顺序匹配。例如:
struct Person p1 = {"Tom", 20, 1.78f, 63.5f};
初始值列表中第一个初始值为字符串常量“Tom”,它会被初始化给 p1 的第一个成员 name;第二个初始值为整型常量值 20,它会被初始化给 p1 的第二个成员 age;第三个初始值为单精度浮点数常量值 1.78,它会被初始化给 p1 的第三个成员 height;第四个初始值为单精度浮点数常量值 63.5,它会被初始化给 p1 的第四个成员 weight。
也可以在初始化的时候,只给出部分初始值。例如:
struct Person p2 = {"Jack", 22};
初始值列表中只有两个初始值,编译器会将第 1 个初始值“Jack”初始化给 p2 的第一个成员 name;将第 2 个初始值 22 初始化给 p2 的第二个成员 age。而 p2 的第三和第四个成员,由于没有对应的初始值,因此,编译器会将其值初始化为 0。
对于结构体类型与结构体变量在同时定义的情况下,也可以对结构体变量进行初始化。例如:
定义了 struct Person 类型的结构体变量 p3,并对其进行初始化,将其 4 个成员值分别初始化为“hill”、23、1.80 和 75.5。
结构体变量的初始化方式虽然与数组的初始化方式有些类似,但数组间是不能相互赋值的,而结构体变量间却可以相互赋值。例如:
p2 = p1;
将结构体变量 p1 赋值给结构体变量 p2 后,结构体变量 p2 各成员的值会与 p1 各成员的值相同。
我们也可以将一个结构体变量,作为另一个结构体变量的初始值。例如:
struct Person p4 = p1;
在定义结构体变量 p4 时,将结构体变量 p1 作为其初始值。同样地,经过初始化后,结构体变量 p4 各成员的值与 p1 各成员的值相同。
需要注意的是,不论是赋值还是初始化,两边的结构体变量的类型都必须一致。不能将一个结构体变量初始化或赋值给另外一种类型的结构体变量。假设有另一个结构体类型 A,我们定义出该类型的变量 a1,并将 p1 作为其初始值。例如:
struct A a1 = p1; //错误
p1 是 struct Person 类型的结构体变量,而 a1 被定义为 struct A 类型的结构体变量,因此,不能将 p1 作为 a1 的初始化值。即便是两个结构体变量所拥有的成员类型、数量和顺序完全相同,也不可以。对于赋值,也是同样的道理。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论