c++学习笔记07 结构体

简介: C++结构体的详细学习笔记07,涵盖了结构体的定义、使用、数组、指针、嵌套、与函数的交互以及在结构体中使用const的示例和解释。
用途

用于自定义数据类型,一些基本类型的集合组成的一个类型

基本形式
sturct 结构体名{
   成员列表}
定义结构体并创建结构体变量

定义结构体

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

创建结构体有3种办法
法1:先创建结构体变量再给结构体变量的属性赋值

//法1:先定义结构体变量再给结构体变量的属性赋值
Student s1;
s1.name = "zhangSan";
s1.age = 18;
s1.score = 80;

法2:创建结构体变量时同时给属性赋值

struct Student s2 = {
    "liSi",19,100 };

法3:定义结构体时顺便创建一个结构体变量

struct Student
{
   
    string name;
    int age;
    int score;
}s3;//法3:定义结构体时顺便创建一个结构体变量
结构体数组
struct Student stuArray[3] =
{
   
    {
    "liSi",19,100 },
    {
    "WangWu",8,70 },
    {
    "ZhaoLiu",50,30 }

};
结构体指针

结构体指针
直接访问结构体变量的属性时,用 结构体变量名.属性名即可访问 如:stu1.name
使用指针来访问结构体变量的属性的时候用 指针变量名->结构体变量的属性名 如:p->name

struct Student s = {
    "liSi",19,100 };
struct Student* p = &s;//指针指向结构体变量
p->score = 80;
cout << "name: " << p->name << " age: " << p->age << " score: " << p->score << endl;
结构体嵌套结构体

结构体的子结构体要在结构体之前定义以免报错

struct Student  //学生是老师结构体的子结构体,要在老师结构体前定义
{
   
    string name;
    int age;
    int score;
};
struct Teacher
{
   
    string name;
    int id;
    struct Student stu;

};

结构体的子结构体在结构体后面加一个. 比如:t.stu.name
主程序中使用范例:

Teacher t;
t.name = "wanglaoshi";
t.id = 010001;
t.stu.name = "herman";
t.stu.age = 10;
t.stu.score = 100;
结构体与函数

区别结构体的值传递与地址传递

void printStruct_value(struct Student s1)//值传递
{
   
    s1.age = 200;
    cout << "val    name: " << s1.name << " age: " << s1.age << " score: " << s1.score << endl;
}
void printStruct_address(struct Student *p)//地址传递
{
   
    p->age = 400;
    cout << "address    name: " << p->name << " age: " << p->age << " score: " << p->score << endl;
}

主程序使用:

printStruct_value(stu);
printStruct_address(&stu);
结构体中const的使用

结构体数组传入函数时,常常量大,为避免值传递新建空间消耗内存过多,常使用地址传递,指针只占用4个字节
同时为了避免地址传递类型的函数不小心修改了结构体变量的值,在传入函数时,命名成常量指针
以便于读数据时不对数据进行修改,可以理解为**“只读”模式**
这个‘常量不可修改’的限制只在函数内存在,因为不是这个结构体变量本身变成了常量,而是只有在使用这个指针时才会受到const的限制

错误示例:

void printStruct(const struct  Student*  p)//const的使用
{
   
    p->age = 400;//报错:试图修改常量
    cout << "address    name: " << p->name << " age: " << p->age << " score: " << p->score << endl;
}
目录
相关文章
|
1月前
|
C++ 容器
C++中自定义结构体或类作为关联容器的键
C++中自定义结构体或类作为关联容器的键
31 0
|
11天前
|
安全 C语言 C++
C++学习笔记
C++学习笔记
|
25天前
|
C++
c++学习笔记02 运算符
C++学习笔记,介绍了C++中的运算符,包括基本的加减乘除、求模、前后置递增递减、赋值运算符、比较运算符和逻辑运算符的使用及其注意事项。
30 6
|
25天前
|
C++
c++学习笔记01 基本知识与数据类型
C++学习笔记,涵盖了C++中的常量定义、数据类型、变量内存大小计算、基本数据类型(整型、实型、字符型、字符串型、布尔型)以及转义字符的使用。
39 4
|
25天前
|
算法 C++
c++学习笔记04 数组
这篇文章是C++学习笔记4,主题是数组。
35 4
|
24天前
|
C++
【学习笔记】【C/C++】 c++字面值常量
【学习笔记】【C/C++】 c++字面值常量
26 1
|
25天前
|
存储 C++
c++学习笔记05 函数
C++函数使用的详细学习笔记05,包括函数的基本格式、值传递、函数声明、以及如何在不同文件中组织函数代码的示例和技巧。
26 0
c++学习笔记05 函数
|
24天前
|
编译器 C++
【C/C++学习笔记】C++声明与定义以及头文件与源文件的用途
【C/C++学习笔记】C++声明与定义以及头文件与源文件的用途
28 0
|
24天前
|
存储 C++
【C/C++学习笔记】string 类型的输入操作符和 getline 函数分别如何处理空白字符
【C/C++学习笔记】string 类型的输入操作符和 getline 函数分别如何处理空白字符
29 0
|
25天前
|
C++
c++学习笔记09 引用
C++引用的详细学习笔记,解释了引用的概念、语法、使用注意事项以及引用与变量的关系。
38 0