结构体(Struct)

本文详细介绍了C++中的结构体,包括如何定义结构体、顺序输入和输出结构体成员、对结构体数组进行排序以及结构体的嵌套和指针使用。示例代码展示了如何创建学生信息结构体,并进行数据输入、输出和排序操作。同时,讨论了结构体在嵌套和指针应用中的实现方式。
摘要由CSDN通过智能技术生成

一、简介

        结构体是由一批数据组合而成的结构型数据。组成结构型数据的每个数据称为结构型数据的“成员”  ,其描述了一块内存区间的大小及解释意义。

        可以通过这样的方法定义结构体:

struct student{
    string name;//定义学生姓名
    int num;//定义学生编号
    int Chinese_Score;//定义语文成绩
    int Maths_Score;//定义数学成绩
    int English_Score;//定义英语成绩
    int Sum_Score;//定义总成绩
    int pg;//定义等级
}stu[101];//定义该结构体数组

二、相关操作

顺序输入结构体

int main()
{
    int n;
    cout<<"请输入学生个数:";
    cin>>n;
    for(int i=0; i<n; i++)
    {
        cout<<"请输入当前学生姓名:";
        cin>>stu[i].name;
        cout<<"请输入当前学生学号:";
        cin>>stu[i].num;
        cout<<"请顺序输入当前学生语文、数学、英语成绩:";
        cin>>stu[i].Chinese_Score>>stu[i].Maths_Score>>stu[i].English_Score;
        cout<<"请输入当前学生评级:";
        cin>>stu[i].pg;
    }
}

        注意,在输入的时候,应该先声明输入的数组名称和下标,再声明结构体成员名称。

顺序输出结构体

void pirnt(int n)
{
    cout<<"------------------"<<endl;
    for(int i=0; i<n; i++)
    {
        cout<<"当前学生姓名:"<<stu[i].name<<endl;
        cout<<"当前学生学号:"<<stu[i].num<<endl;
        cout<<"当前学生语文成绩:"<<stu[i].Chinese_Score<<endl;
        cout<<"当前学生数学成绩:"<<stu[i].Maths_Score<<endl;
        cout<<"当前学生英语成绩:"<<stu[i].English_Score<<endl;
        cout<<"当前学生评级:"<<stu[i].pg<<endl;
        cout<<"------------------"<<endl;
    }
}

结构体排序

bool cmp(student a,student b)
{
    return a.Sum_Score>b.Sum_Score;//按照总成绩从大到小排序
}
void sortt(int n)
{
    sort(stu,stu+n,cmp);
    print();
}

        这里使用了排序函数sort。当然,如果是对结构体进行排序的话,必须要有cmp函数来声明排序方法。

结构体嵌套

struct teacher
{
    int num;
    string name;
    int age;
    struct student stu;
    //struct Student stu[100];
};

        这是老师的结构体,每个老师还带了一些学生,所以应当嵌套一层学生结构体。

结构体指针

指针(Pointer)_Hacket_徐的博客-CSDN博客指针是一种数据类型,指针变量的值是另一个变量在内存中的地址。每一个变量都有一个名字,且在内存中占据一个内存位置(地址),可以通过。计算机的内存中每个存储单元都是有序的,都是按字节编码,字节是最小的存储单位。在定义指针的时候如果不一开始就赋值的话,建议赋空,避免出错。这样的赋值后,p1和p2指向同样的地址,对p2的任何更改都会影响p1的值。这其中,->用于指向结构体的指针,表示结构体内的元素。操作内存上的值,也可以通过地址间接操作内存上的值。而64位编译器的内存中,内存空间的地址最多到。https://blog.csdn.net/weixin_46522531/article/details/127335492?spm=1001.2014.3001.5502        见此文章。


以上就是本文的全部内容啦!感谢阅读!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值