结构体声明
在C++语言中,除了int(整型)、long long(长整型) 、short(短整型)、string(字符串) 、bool(布尔型)、float(单精度浮点型)、double(双精度浮点型)等等数据类型外,咱们也可以根据自己的需要,用struct自定义结构体数据类型。使用结构体必须要声明一个结构体类型,再定义和使用结构体变量。结构体类型的声明格式如下:
struct 类型名
{
数据类型1 成员名1;
数据类型2 成员名2;
......
};
(一定要打分号,分号表示结构体声明完成)
例如,声明一个学生类型的结构体:
struct student
{
int age;
string name;
int height;
};
上面定义了一种新的结构体数据类型:student类型,student类型含有三个成员:age、name、height。
结构体变量
(一)结构体变量的定义
格式是: 结构体类型名 变量名列表;
例如:在声明了student类型之后,就可以用下面的格式来定义变量:
student a,b,c; //变量a,b,c是student类型的变量。
(二)结构体变量的成员的引用
结构体变量的成员的引用,格式是:结构体变量名.成员名。
例如: student a; //a是student类型变量。
如果需要引用a的name成员,那么格式是:a.name, 因为a.name是string类型,因此它的使用方法普通的string类型变量相同。同理,如果需要引用a的age成员,那么格式是a.age,a.age的使用方法和int类型变量的使用方法相同。
(三)结构体变量的读入输出
可以通过cin和cout对结构体变量的每个成员进行读入和输出操作。
studnet a; //a是student类型变量。
cin>>a.name>>a.age>>a.height; //读入a的姓名、年龄、身高
cout<<a.name<<" "<<a.age<<" "<<a.height<<endl; //输出a的姓名、年龄、身高
(四)结构体变量的初始化
回顾一下在定义一个整型变量时可以进行初始化工作,例如:
int age=15; //定义了age变量,它是int类型,而且age的初始值为15。
那么结构体变量在定义时是否可以进行初始化呢?可以!
struct student //声明一种student类型
{
int age;
string name;
int height;
};
student a={15,"zhangsan",160}; //a是student类型变量,年龄是15,姓名是"zhangsan",身高是160。
(五)结构体变量的赋值
定义了结构体变量之后,可以给结构体变量的各个成员赋值。
student a;
a.age = 18;
a.name = "zhangsan";
a.height=165;
(六)交换结构体变量
我们可以使用swap函数来交换两个整数变量、两个字符串变量等等。我们也可以使用swap函数来交换两个结构体变量。例如:
student a,b;
cin>>a.age>>a.name>>a.height;
cin>>b.age>>b.name>>b.heigth;
swap(a,b); //交换a和b变量。
结构体数组
(一)结构体数组的定义
struct student
{
int age;
string name;
int height;
};
上面声明了student这个结构体类型。如果我们要保存100个学生的信息,怎么办?
可以定义一个student类型的数组,格式如下:
student a[100]; //a是stduent类型的数组,这个数组可以保存100个student类型的变量,分别是a[0]、a[1]、a[2]、...... a[99]。
(二)结构体数组的读入输出
可以用循环语句读入结构体数组的信息。
下面是读入100个学生的代码:
student a[100]; //定义一个数组,这个数组的类型是student类型,保存100个学生信息。
for(int i=0; i<100; i++) //读入100个学生的信息。
{
cin>>a[i].age>>a[i].name>>a[i].height; //读入第i个学生的信息。
}
for(int i=99;i>=0; i--) //反向输出每个学生的信息
{
cout<<a[i].name<<" "<<a[i].age<<" "<<a[i].height<<endl; //输出第i个学生信息
}