结构体嵌套结构体、结构体做函数参数、结构体const的使用。
内容纲要

结构体嵌套结构体

作用:结构体中的成员可以是另一个结构体。
例如:每个老师辅导员,可以带学生。

struct student{
    int id;
    string name;
    int age;
    struct student stu;
}

struct student {
    int age;
    string name;
    double score;
}

实例:

    typedef struct IRISKEY3_EyeInfo
    {
        /// True if a pupil was found, otherwise false
        bool bFoundPupil;
        /// True if a Iris was found, otherwise false
        bool bFoundIris;

        /// Holds centre and radius for pupil or iris
        struct SEyeComponent
        {
            /// X-coordinate of the centre
            int nCentreX;
            /// Y-coordinate of the centre
            int nCentreY;
            /// Radius of pupil or iris
            int nRadius;
        };
        /// Holds the pupil information
        SEyeComponent oPupil;
        /// Holds the iris information
        SEyeComponent oIris;
        /**@brief Percentage of usable iris area
        *@par
        * This metric details the amount of usable iris area of the segmented
        * image.  The Segmented pupil and iris, eyelids and specular
        * reflections are considered when calculating the percentage of the
        * visible iris area.  Value range: 0 - 100 (Higher = Better)
        */
        double UsableIrisArea;
    } IRISKEY3_EyeInfo;
#include <iostream>

#include "string"

using namespace std;

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

struct teacher {
    int age;
    string name;
    int id;
    struct student stu;
};

int main() {
    //student stu = { "张三",20,60 };
    teacher t = {
       30,"DearL",1234
    };

    t.stu.name = "法外狂徒张三";

    cout << "t.name: " << t.name << "   t.stu.name: " << t.stu.name << endl;
    system("pause");
}

注意:上方结构体嵌套中,被嵌套方要提前定义,否则在当时不会报错,但是在结构体创建对象的时候编译会报错。

  • 可以通过 父结构体.子结构体.参数 来进行赋值。

结构体做函数参数

作用:将结构体作为参数向函数中传递。
传递方式:1.值传递 2.地址传递。

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

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

struct teacher {
    int age;
    string name;
    int id;
    struct student stu;
};

void print(struct teacher teacher)
{
    teacher.age = 100; //值传递中修改信息
    cout << "print函数打印老师的age: " << teacher.age << endl; //100;
    cout << "老师的姓名:" << teacher.name << "  学生的姓名:" << teacher.stu.name << endl;
}

void printTeacher(struct teacher * teacher)
{
    teacher->age = 200; //地址传递中修改信息。
    cout << "地址传递的老师姓名:" << teacher->name << "  地址传递的学生姓名:" << teacher->stu.name << endl;
}

int main() {
    //student stu = { "张三",20,60 };
    teacher t = {
       30,"DearL",1234
    };

    t.stu.name = "法外狂徒张三";

    cout << "t.name: " << t.name << "   t.stu.name: " << t.stu.name << endl;

    //结构体做参数传递
    print(t);
    cout << "值传递后的老师的年龄: " << t.age << endl; //30;不变,因为影响不了结果
    //结构体地址传递
    printTeacher(&t);
    cout << "地址传递后的老师的年龄: " << t.age << endl; //200,变了,因为传进去的地址,直接被修改了内存中保存的数据
    system("pause");

}

注意:
地址传递(引用传递)中通过指针修改了参数的值会影响在内存中保存的参数。
值传递中修改了对象的值的作用域只在被调用的函数中。
地址传递 使用访问修饰符 -> 来修改对象的参数。如果要修改对象中结构体参数则再 . 结构体中的成员。

  • 特别重要:在值传递中是拷贝的值,而拷贝值会占用内存,如果数据量特别大的话 (一个很大的结构体数组),占用的空间会更多。因此使用引用传递能节省资源的消耗。但是要注意值的安全性

结构体中 const 使用场景

作用:用 const 来防止误操作
(正如上方结构体地址传递修改对象的参数)

  • 特别重要:在值传递中是拷贝的值,而拷贝值会占用内存,如果数据量特别大的话,占用的空间会更多。因此使用引用传递能节省资源的消耗。但是要注意值的安全性

file

总结

1.结构体嵌套结构体能使自定义数据类型更有层次,类似于Java 中内部类的效果。
在实际应用中 Irience_SDK 下结构体定义在头文件中,结构体中嵌套另外一个 常量指针

file

2.结构体做函数参数时,注意传递参数的类型。分为引用传递和值传递。值传递属于拷贝,如果数据量很大时,会占用额外很多内存空间。Irience_SDK 中使用的是地址传递。
3.结构体中 const 的使用防止误操作而修改了成员变量的值。同时也能保护好数据的封装性。 建议回头看一看 常量指针、指针常量。

暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇