小白学结构体

1、定义与使用

#include<iostream>
#include<string>    
using namespace std;

//1 创建学生数据内型:学生包括(姓名,年龄,分数)
//自定义数据内型,一些内型集合组成的一个内型
//语法 struct 内型名称 {成员列表}
struct sb//student
{
  //成员列表

  //姓名
   string name;
  //年龄
   int year;
  //分数
  int test;
}s3; //顺便定义不建议使用


//2 通过学生三个内型创建具体学生

int main(void)
{
    //2.1 struct student s1;
    //下面的struct关键字可以不写
    struct sb s1;
    //给s1赋值
    s1.name = "张三";
    s1.year = 18;
    s1.test = 100;
cout<<"姓名: "<<s1.name<<" 年龄: "<<s1.year<<" 成绩: "<<s1.test<<endl;


//2.2 struct student s2 = {……}
struct sb s2 = {"小红",17,89};
cout<<"姓名: "<<s2.name<<" 年龄: "<<s2.year<<" 成绩: "<<s2.test<<endl;


//2.3 在定义结构体时顺便创建结构体变量 (不建议用)
 //看main函数上面的struct
    s3.name = "张四";
    s3.year = 18;
    s3.test = 100;

    return 0;
}

2、结构体数组

#include<iostream>
#include<string>
using namespace std;
//结构体数组
//1、定义结构体
struct sd       //学生缩写
{
   string name;  //姓名
   int  yesr;    //年龄
   int  test;
};     //记得加;


int main(void)
{
//2、创建结构体数组
  struct sd sdArr[2] = 
  {
    {"张三",18,96},
    {"李四",19,97}
    //...
  }; 

     
 
//3、给结构体数组中的元素赋值
    sdArr[1].yesr = 17 ;          //把李四的年龄改为17
 

 //输出
for(int i = 0;i<2;i++)
{
cout<<"姓名: "<<sdArr[i].name
    <<" 年龄: "<<sdArr[i].yesr
    <<" 分数: "<<sdArr[i].test
    <<endl;
}

    return 0;
}

3、结构体指针

#include <iostream>
using namespace std;

struct Student
{
    string name;
    int age;
    int score;
};

int main()
{
    Student stu1 = {"张三", 18, 90};
    Student *p = &stu1;

    cout << "姓名:" << p->name << endl;
    cout << "年龄:" << p->age << endl;
    cout << "成绩:" << p->score << endl;

    return 0;
}
# 4、结构体嵌套
​```cpp
// 包含iostream头文件,使用std命名空间
#include <iostream>
using namespace std;

// 定义Student结构体,包含name、age、score三个成员变量
struct Student
{
    string name;
    int age;
    int score;
};

// 定义Teacher结构体,包含name、age、salary、stu四个成员变量
struct Teacher
{
    string name;
    int age;
    int salary;
    Student stu;
};

// 主函数,程序从这里开始执行
int main()
{
    // 定义Teacher类型的变量t1,并初始化其成员变量
    Teacher t1 = {"张三", 38, 5000, {"李四", 18, 90}};

    // 输出t1的成员变量
    cout << "姓名:" << t1.name << endl;
    cout << "年龄:" << t1.age << endl;
    cout << "工资:" << t1.salary << endl;
    cout << "姓名:" << t1.stu.name << endl;
    cout << "年龄:" << t1.stu.age << endl;
    cout << "成绩:" << t1.stu.score << endl;

    // 函数返回值为0,表示程序正常结束
    return 0;
}

5、结构体作为函数参数

// 结构体做函数参数
// 传递方式
// 值传递
// 指针传递

#include <iostream>
#include <string>
using namespace std;

// 定义学生结构体
struct sd
{
    string name; // 名字
    int age;     // 年龄
    int test;    // 分数
};

// 输出学生基本信息函数

// 1‘值传递
void ncout(struct sd s)
{
    s.name = ""; // 只改变这次自定义函数中的输出结果
    cout << "子函数中的值传递输出 " << endl
         << " 姓名: " << s.name
         << endl
         << " 年龄: " << s.age << endl
         << " 分数: " << s.test
         << endl;
}

// 地址传递(要用到指针)
void pncout(struct sd *s)
{
    s->name = ""; // 全局修改
    cout << "子函数中的地址传递输出 " << endl
         << " 姓名: " << s->name
         << endl
         << " 年龄: " << s->age << endl
         << " 分数: " << s->test
         << endl;
}

int main(void)
{
    // 将学生传入一个参数中 并打印

    // 创建结构体变量
    struct sd s;
    s.name = "膝关节";
    s.age = 19;
    s.test = 98;

    // 自定义函数输出
    ncout(s); // 自定义函数,做到输出学生的基本信息
    cout << endl
         << endl;

    pncout(&s); // 自定义函数,做到输出学生的基本信息
    cout << endl
         << endl;

    // 正常的输出方式,不过我们今天要用的是自定义函数来输出这一穿
    cout << "main函数中打印" << endl
         << " 姓名: " << s.name
         << endl
         << "年龄" << s.age
         << endl
         << "分数" << s.test << endl;

    return 0;


    //运行结果 

    // 子函数中的值传递输出
    // 姓名: 膝关节
    // 年龄: 19
    // 分数: 98
    //
    // 子函数中的地址传递输出
    // 姓名: 你
    // 年龄: 19
    // 分数: 98
    //
    // main函数中打印
    // 姓名: 膝关节
    // 年龄: 19
    // 分数: 98
}

本文的所有源码都在[我的github](https://github.com/ababll5/blog_cpp)里