• 结构体定义和使用 安静点


     1 结构体基本概念

    结构体属于用户==自定义的数据类型==,允许用户存储不同的数据类型,不同于内置的类似于int,string这些数据类型。

     2  结构体定义和使用

    语法:struct 结构体名 { 结构体成员列表 };

    通过结构体创建变量的方式有三种:

    • struct 结构体名 变量名
    • struct 结构体名 变量名 = { 成员1值 , 成员2值...}
    • 定义结构体时顺便创建变量

     示例:

    //结构体定义
    struct student
    {
        //成员列表
        string name;  //姓名
        int age;      //年龄
        int score;    //分数
    }stu3; //结构体变量创建方式3 
    
    
    int main() {
    
        //结构体变量创建方式1
        struct student stu1; //struct 关键字可以省略
    
        stu1.name = "张三";
        stu1.age = 18;
        stu1.score = 100;
        
        cout << "姓名:" << stu1.name << " 年龄:" << stu1.age  << " 分数:" << stu1.score << endl;
    
        //结构体变量创建方式2
        struct student stu2 = { "李四",19,60 };
    
        cout << "姓名:" << stu2.name << " 年龄:" << stu2.age  << " 分数:" << stu2.score << endl;
    
    
        stu3.name = "王五";
        stu3.age = 18;
        stu3.score = 80;
        
    
        cout << "姓名:" << stu3.name << " 年龄:" << stu3.age  << " 分数:" << stu3.score << endl;
    
        system("pause");
    
        return 0;
    }

    总结1:定义结构体时的关键字是struct,不可省略

    总结2:创建结构体变量时,关键字struct可以省略

    总结3:结构体变量利用操作符 ''.'' 访问成员

     3 结构体数组

    **作用:**将自定义的结构体放入到数组中方便维护

    语法: struct 结构体名 数组名[元素个数] = { {} , {} , ... {} }

    示例:

    //结构体定义
    struct student
    {
        //成员列表
        string name;  //姓名
        int age;      //年龄
        int score;    //分数
    }
    
    int main() {
        
        //结构体数组
        struct student arr[3]=
        {
            {"张三",18,80 },
            {"李四",19,60 },
            {"王五",20,70 }
        };
    
        for (int i = 0; i < 3; i++)
        {
            cout << "姓名:" << arr[i].name << " 年龄:" << arr[i].age << " 分数:" << arr[i].score << endl;
        }
    
        system("pause");
    
        return 0;
    }

     

    4 结构体指针

    **作用:**通过指针访问结构体中的成员

    • 利用操作符 -> 可以通过结构体指针访问结构体属性
    //结构体定义
    struct student
    {
        //成员列表
        string name;  //姓名
        int age;      //年龄
        int score;    //分数
    };
    
    
    int main() {
        
        struct student stu = { "张三",18,100, };
        
        struct student * p = &stu;
        
        p->score = 80; //指针通过 -> 操作符可以访问成员
    
        cout << "姓名:" << p->name << " 年龄:" << p->age << " 分数:" << p->score << endl;
        
        system("pause");
    
        return 0;
    }

    总结:结构体指针可以通过 -> 操作符 来访问结构体中的成员

    C++结构体与类的区别 

    5 结构体嵌套结构体

    作用: 结构体中的成员可以是另一个结构体

    **例如:**每个老师辅导一个学员,一个老师的结构体中,记录一个学生的结构体

    //学生结构体定义
    struct student
    {
        //成员列表
        string name;  //姓名
        int age;      //年龄
        int score;    //分数
    };
    
    //教师结构体定义
    struct teacher
    {
        //成员列表
        int id; //职工编号
        string name;  //教师姓名
        int age;   //教师年龄
        struct student stu; //子结构体 学生
    };
    
    
    int main() {
    
        struct teacher t1;
        t1.id = 10000;
        t1.name = "老王";
        t1.age = 40;
    
        t1.stu.name = "张三";
        t1.stu.age = 18;
        t1.stu.score = 100;
    
        cout << "教师 职工编号: " << t1.id << " 姓名: " << t1.name << " 年龄: " << t1.age << endl;
        
        cout << "辅导学员 姓名: " << t1.stu.name << " 年龄:" << t1.stu.age << " 考试分数: " << t1.stu.score << endl;
    
        system("pause");
    
        return 0;
    }

    6 结构体做函数参数

    **作用:**将结构体作为参数向函数中传递

    传递方式有两种:

    • 值传递
    • 地址传递
    //学生结构体定义
    struct student
    {
        //成员列表
        string name;  //姓名
        int age;      //年龄
        int score;    //分数
    };
    
    //值传递
    void printStudent(student stu )
    {
        stu.age = 28;
        cout << "子函数中 姓名:" << stu.name << " 年龄: " << stu.age  << " 分数:" << stu.score << endl;
    }
    
    //地址传递
    void printStudent2(student *stu)
    {
        stu->age = 28;
        cout << "子函数中 姓名:" << stu->name << " 年龄: " << stu->age  << " 分数:" << stu->score << endl;
    }
    
    int main() {
    
        student stu = { "张三",18,100};
        //值传递
        printStudent(stu);
        cout << "主函数中 姓名:" << stu.name << " 年龄: " << stu.age << " 分数:" << stu.score << endl;
    
        cout << endl;
    
        //地址传递
        printStudent2(&stu);
        cout << "主函数中 姓名:" << stu.name << " 年龄: " << stu.age  << " 分数:" << stu.score << endl;
    
        system("pause");
    
        return 0;
    }

    总结:如果不想修改主函数中的数据,用值传递,反之用地址传递

    C++函数调用之——值传递、指针传递、引用传递

    内置类型和结构体类型作为函数参数传递时的共同点

    7 结构体中 const使用场景

    **作用:**用const来防止误操作

    示例:

    //学生结构体定义
    struct student
    {
        //成员列表
        string name;  //姓名
        int age;      //年龄
        int score;    //分数
    };
    
    //const使用场景
    void printStudent(const student *stu) //加const防止函数体中的误操作
    {
        //stu->age = 100; //操作失败,因为加了const修饰
        cout << "姓名:" << stu->name << " 年龄:" << stu->age << " 分数:" << stu->score << endl;
    
    }
    
    int main() {
    
        student stu = { "张三",18,100 };
    
        printStudent(&stu);
    
        system("pause");
    
        return 0;
    }

     使用指针传递参数有一个很大的原因是提高效率,因为不管信息多大,通过指针传递,在32位下都只会传递4个字节,比单纯将整个结构体传入性能要高。

      

  • 相关阅读:
    Java 引用传递和值传递
    jenkins 自动化部署 spring boot 项目(多图)
    Mybatis学习笔记,持续更新
    ubuntu 安装并远程连接redis
    ubuntu redis 集群安装,超简单多图细腻操作
    ubuntu16.04 的 使用笔记
    阿里云 ubuntu16.04 下 ftp 的快速应用(包罗疑难问题解决方案)
    k8s的#容器镜像
    kubectl命令出现【The connection to the server localhost:8080 was refused
    CIDR无类别域间路由
  • 原文地址:https://www.cnblogs.com/anjingdian/p/16030826.html
Copyright © 2020-2023  润新知