感谢2004郑楚煌整理提供
一、定义
结构体是一种把不同类型的变量打包结合成一个一个变量类型。例如,现在我们要存储多个学生的考试成绩,由姓名(string),学号(int),语文数学英语成绩(可能有小数,所以要用double),如果按照一般方法处理,我们要这样做:
string name[20];
int number[20];
double chinese[20],maths[20],english[20];
这样处理是非常不方便的事情,而且不方便管理。我们就可以把它打包成一个结构体,每一个结构体都可以存储这5种数据。
二、用法
格式如下:
struct 类型名 {
变量列表;
};
注意最后是要加分号的,不是定义自定义函数那样直接大括号结束的。
例如,上面的例子可以表示为:
struct studentinfo {
string name;
int number;
double chinese,maths,english;
};
以后就可以声明这种类型的变量了。
声明结构体变量的方式:
struct 类型名 变量名
例如:
struct studentinfo student[20];
就可以声明20个studentinfo类型的数据了,并且是一个数组。
三、已知有n个学生,每个学生有一个姓名和成绩,输入n,每个学生的姓名和成绩,输出班级的第一名的姓名和成绩。
分析:这一题把学生姓名和成绩放在一起作为一个结构体会方便管理。
程序实例:
#include<bits/stdc++.h>
using namespace std;
struct studentinfo{
string name;
int score;
};
int main() {
int n;
cin>>n;
struct studentinfo stu[n];
for(int i=0;i<n;i++)
cin>>stu[i].name>>stu[i].score;
int first=0;
string str="";
for(int i=0;i<n;i++)
if(stu[i].score>first){
first=stu[i].score;
str=stu[i].name;
}
cout<<str<<' '<<first<<endl;
return 0;
}
结构体的每一个成员都可以单独存取,可以用“.”分割开,说明是哪一个变量。例如:stu[i].name就是指stu[i]的name成员变量。
四、结构体指针
1,结构体指针就是指向结构体的指针,其内存地址就是该结构体的第一个元素的地址。
如:
struct studentinfo a;
struct studentinfo *stu;
*stu=&a;
此段代码中stu指针变量指向的就是a。
2,引用
(*stu).name
表示*stu的name成员。注意括号虽然不好看,但是不能省略。
*stu.name相当于:*(stu.name)。