C++语言程序设计

4．结构变量的初始化
结构变量可以在定义时初始化，例如：
struct stu /*定义结构*/
{
int num;
char *name;
char sex;
float score;
}boy2,boy1={102,"Zhang ping",'M',78.5};
定义了结构类型stu的同时，也定义了结构变量boy1和boy2，并对boy1作了初始化。

| 例8-3

#include <iostream.h>
const int MAXIMUM_NAME_LENGTH = 50;
typedef char name_string[MAXIMUM_NAME_LENGTH];
//定义最大长度为50的name_string 字符串
struct room //定义结构类型room,包括三个整型成员
{
int number;
int floor;
int capacity;
};
struct employee //定义结构类型employee,包括成员
//name,age,salary,location
{
name_string name;
int age;
double salary;
room location;
};
int main() //主函数
{
int place;
employee first_employee; //声明一个employee型结构变量first_employee
room room_one, room_two; //声明room型结构变量room_one和room_two
room_one.number = 1; //对room_one各成员进行赋值
room_one.floor = 0;
room_one.capacity = 6;
room_two.number = 2; //对room_two各成员进行赋值
room_two.floor = 3;
room_two.capacity = 4;
cout << "Please enter the employee's last name: ";
cin >> first_employee.name;
//输入first_employee的成员name(长度不超过50的字符串)
cout << "Please enter the employee's age: ";
cin >> first_employee.age; //输入first_employee的成员age
cout << "Please enter the employee's current salary: ";
cin >> first_employee.salary; //输入first_employee的成员salary
cout << "Put in room 1 or in room 2? (type '1' or '2'): ";
cin >> place; //输入1或2，选择room
if (place == 1)
first_employee.location = room_one;
if (place == 2)
first_employee.location = room_two;
cout << endl << first_employee.name << " is now on floor ";
cout << first_employee.location.floor << "." << endl;
//输出first_employee.name所在的floor
return 0;
}

这个程序比较简单，主要是应用结构数据类型来表示和处理实际问题。其中用到了结构类型的定义、结构变量的定义、结构变量的3种引用和赋值方式。完全体现了结构类型从定义到引用的方法和规则，下面结合该程序总结一下结构类型的定义和引用赋值。
程序首先定义了常量MAXIMUM_NAME_LENGTH和最大长度为MAXIMUM_NAME_LENGTH的字符数组name_string。然后定义了两个结构类型room和employee，其中employee中有一个成员是room结构类型的，即location。有了room和emplyee两种结构类型，就可以方便地定义这两种结构类型的变量。
在主函数中，首先定义了employee型结构变量first_employee和room型结构变量room_one和room_two。然后对room_one和room_two赋值，用到了成员运算符"."，例如：room_one.capacity=6。
因为结构的最低级成员就是内置的数据类型，可以象内置数据类型的变量一样进行各种运算和输入输出。因此，程序用输入的方式对employee的成员（name、age、salary）进行赋值。并且根据输入1或2来确定employee.location的值。输入为1时，用room_one赋值，输入为2时，用room_two赋值。这里也用到了结构变量的整体赋值，例如：
first_employee.location=room_one
最后，对first_employee的数据进行输出，包括name和location.floor。由于first_employee.location是结构room的成员，所以对location的成员floor要嵌套引用，即first_emplyee.location.floor。
对于程序的输出结果，如果选择1作为place的输入，那么first_employee.location就是room_one，最后输出的first_emplyee.location.floor实际上是room_one.floor。由于一开始结构变量room_one就已被赋值，其中room_one.floor的值为0，所以最后的输出为：
Miller is now on floor 0