C++ 基础知识(6)--结构体

结构体

结构体struct是用来存放一组不同类型的数据。

  1. 声明结构体类型
  2. 定义变量名
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    #include <iostream>
    #include <string>

    using namespace std;

    // 1. 声明结构体类型Student
    struct Student {
    string name;
    int age;
    float score;
    };

    int main(){
    // 2.定义变量名
    struct Student student = {"张三",19,80.0};
    cout << "姓名:" <<student.name <<endl;
    cout<< "年龄:" << student.age <<endl;
    cout<< "分数:" << student.score <<endl;
    return 0;
    }
    运行结果:
    1
    2
    3
    姓名:张三
    年龄:19
    分数:80
    结构体的初始化也可以使用.,如student.name = "张三";
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    #include <iostream>
    #include <string>

    using namespace std;

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

    int main(){
    struct Student student;
    student.name = "李四";
    student.age = 18;
    student.score = 90.2;
    cout << "姓名:" <<student.name <<endl;
    cout<< "年龄:" << student.age <<endl;
    cout<< "分数:" << student.score <<endl;
    return 0;
    }
    运行结果:
    1
    2
    3
    姓名:李四
    年龄:18
    分数:90.2
    如果想要定义多个变量名可以用,隔开。
    1
    2
    // 定义Student结构体两个变量名
    struct Student student,stundent1;
    如果是定义结构体变量名的话是可以省略关键字struct的,但是声明结构体是必须要带关键字struct
    1
    2
    3
    4
    5
    6
    7
    8
    9
    // struct 必须要有
    struct Student {
    string name;
    int age;
    float score;
    };

    // struct 可以忽略
    Student student;

结构体嵌套

结构体嵌套就是一个结构体里面的成员是另一个结构体。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
#include <iostream>
#include <string>

using namespace std;

const int LEN = 2;
struct Student {
string name;
int age;
float score;
};

struct Teacher {
string name;
int age;
Student students[LEN]; // students成员代表Student结构体数组
};

int main(){
struct Teacher teacher = {
"王老师",37,{
{"张三",19,81.2},
{"李四",18,66.6},
},
};
cout << "老师名字:" << teacher.name << endl;
cout << "老师年龄:" << teacher.age << endl;
for (int i = 0; i<LEN; i++) {
cout<< "学生姓名:" << teacher.students[i].name << "\t学生年龄:" << teacher.students[i].age << "\t学生分数:" << teacher.students[i].score <<endl;
}
return 0;
}

运行结果:

1
2
3
4
老师名字:王老师
老师年龄:37
学生姓名:张三 学生年龄:19 学生分数:81.2
学生姓名:李四 学生年龄:18 学生分数:66.6

结构体与指针

结构体赋值给指针,指针一样是可以指向该结构体的内存地址的。指针想访问或者修改结构体变量的值需要用到->

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
#include <iostream>
#include <string>

using namespace std;

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


int main(){
// 创建结构体变量
Student student={"张三",20,45.1};
// 通过指针指向结构体变量
Student * const p = &student;
// 通过指针访问结构体变量
cout << p->name << "\t" << p->age << "\t"<< p->score << endl; // 张三 20 45.1

// 通过指针修改值
p->name = "李四";
p->age = 22;
p->score = 35;

cout << p->name << "\t" << p->age << "\t"<< p->score << endl; // 李四 22 35
cout << student.name << "\t" <<student.age << "\t"<<student.score << endl; //李四 22 35
return 0;
}

运行结果:

1
2
3
张三	20	45.1
李四 22 35
李四 22 35