2.1.3 构造数据类型(4)
(2) 结构体变量的初始化
与其他类型变量一样,也可以给结构体的每个成员赋初值,这称为结构体的初始化。有两种初始化形式,一种是在定义结构体变量时进行初始化,一般语法格式如下:
- struct 结构体名 变量名={初始数据表};
另一种是在定义结构体类型时进行结构体变量的初始化。一般语法格式如下:
- struct 结构体名
- {
- 成员表列;
- }变量名={初始数据表};
例如,前述student结构体类型的结构体变量wan在说明时可以初始化如下:
- struct student wan={"Wan Jun",'m',20," SuZhou Road No.100"};
其所实现的功能,与下列分别对结构体变量的每个成员赋值所实现的功能相同:
- strcpy(wan.name," Wan Jun");
- wan.sex='m';
- wan.age=20;
- wan.addr=" SuZhou Road No.100";
与数组的初始化特性相同,结构体的初始化仅限于外部的和static型结构体。也就是说,在函数内部对结构体进行初始化时,必须指定该结构体为static型。对默认存储类型的auto型结构体不能在函数内部对其进行初始化。
4) 结构体应用举例
例2-4 把家庭定义成包含一个丈夫,一个妻子,一个或多个孩子,如表2-4所示是这一数据的记录。把这些数据输出。
表2-4 几个家庭的数据记录
|
Husband
|
Wife
|
Children
|
|
John
|
Kathy
|
2
|
|
Kenneth
|
Syiivia
|
3
|
|
Peter
|
Loyce
|
1
|
- #include<iostream.h>
- void main()
- {
- struct family
- {
- char husband[10];
- char wife[10];
- int children;
- };
- struct family Gerard={"John","Kathy",2};
- struct family Cole={"Kenneth","Sylvia",3};
- struct family Chen={"Peter","Joyce",1};
- Gerard. children=0;
- Cole. children=2;
- Chen. children=4;
- cout<<" Gerard Children:"<< Gerard. children<<"\n";
- cout<<" Cole Children:"<< Cole. children<<"\n";
- cout<<" Chen Children:"<< Chen. children<<"\n";
- }
该程序的输出结果如图2-5所示。

2. 共用体(union)
在C++语言中,不同数据类型的数据可以使用共同的存储区域,这种数据构造类型称为共用体,简称共用,又称联合体。共用体在定义、说明和使用形式上与结构体相似。两者本质上的不同仅在于使用内存的方式上。
1) 共用体的定义
定义一个共用体类型的一般形式为:
- union 共用体名
- {
- 成员表列;
- };
例如:
- union gy
- {
- int i;
- char c;
- float f;
- };