结构体
结构体是一种构造数据类型
(构造数据类型包括:数组类型、结构体类型、共用体类型)
定义:把不同的数据组合成一个整体。
结构体的一般形式
struct [结构体名称]//struct是关键字
{
类型标识符 成员名;//成员类型可以是基本型或构造性
类型标识符 成员名;
……
};//不要忘记这里的分号
定义结构体的三种方法
//第一种:先定义结构体类型,在定义变量名
struct student
{
int num;
char name[20];
char sex;
int age;
float score;
};
struct student stu1,stu2;
//第二种:定义结构体类型同时定义结构体类型变量
struct student
{
int num;
char name[20];
char sex;
int age;
float score;
char addr[30];
}stu1,stu2;
//第三种:直接定义结构体类型变量
struct
{
int num;
char name[20];
char sex;
int age;
float score;
char addr[30];
}stu1,stu2;
结构体类型和结构体变量的区别
类型:不分配内存; 变量:分配内存
类型:不能赋值、存取、运算; 变量:可以
结构体可嵌套 结构体成员名与程序中变量名可相同,不会混淆
结构体嵌套
//结构体嵌套
struct date
{ int month;
int day;
int year;
};
struct student
{ int num;
char name[20];
struct date birthday;
}stu;
结构体排序
结构体排序是将不同类型的数据通过一定的原则进行排序,比如:
成绩单将成绩从大到小排序,输出名字的排名。
代码如下:
//结构体排序
#include<stdio.h>
#include<algorithm>
using namespace std;//引入sort函数
struct student
{
int a;
char *name;
}stu1,stu2; //自定义一个结构体
bool mycmp(student stu1,student stu2){
if(stu1.a>stu2.a) return true;
else return false;
}//自定义一个比较函数,通过ture和false来返回大小关系
int main()
{
student arr[3];
arr[0].a=100;
arr[0].name="liming";
arr[1].a=95;
arr[1].name="zhanghong";
arr[2].a=88;
arr[2].name="wangmei";
sort(arr,arr+3,mycmp);
for(int i=0;i<3;++i){
printf("%s %d\n",arr[i].name,arr[i].a);
}
return 0;
}