结构体与结构体指针

结构体属于用户自定义的数据类型,允许用户储存不同的数据类型

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

通过学生类型创建具体学生,在主函数中

//第一种
    struct student s1;//创建时可以省略struct,如:student s1;但是定义时不可以省略
    s1.name = "张三";
    s1.age = 18;
    s1.score = 100;
    cout << "姓名为" << s1.name << " 年龄" << s1.age << " 分数" << s1.score << endl;
//第二种
    struct student s2 = { "李四",19,80};
    cout << "姓名为" << s2.name << " 年龄" << s2.age << " 分数" << s2.score << endl;
    //第三种在定义结构体的末尾
    s3.name = "王五";
    s3.age = 15;
    s3.score = 90;
    cout << "姓名为" << s3.name << " 年龄" << s3.age << " 分数" << s3.score << endl;

第三种定义结构体在这里,直接在创建数据类型时创建,方便快捷但是不方便寻找

struct student //创建学生数据类型
{
    string name;//字符串
    int age;//整型
    int score;//分数 
}s3;//第三种

结构体嵌套结构体

结构体中的成员可以说另一个结构体

每个老师名下有5个老师,学生拥有不同的姓名和分数

先创建老师

//先创建老师
struct teacher
{
    int id;
    string name;
    int age;
    struct student stu;
};
//两种不同的传递方式 将学生姓名与成绩传递到老师名下
void printstudent1(struct student s)//值传递
    {
        s.age = 100;
        cout << "子函数1中打印" << s.name 
             << " 年龄" << s.age << " 分数" 
             << s.score << endl;
    }

    void printstudent2(struct student* p)
    {
        p->age = 200;
        cout << "子函数2中打印" << p->name
            << " 年龄" << p->age << " 分数"
            << p->score << endl;
    }

结构体数组

    //结构体数组
    struct student arr[3] =
    {
        {"张三",12,60},
        {"李四",14,70},
        {"王五",15,90},
    };
    //后续给结构体数组内赋值
    arr[2].name = "赵六";
    arr[2].age = 19;
    arr[2].score = 60;
    for (int i = 0; i < 3; i++)
    {
        cout << "姓名为" << arr[i].name << " 年龄" << arr[i].age << " 分数" << arr[i].score << endl;
    }

结构体指针

利用操作符->可以通过结构体指针访问结构体属性

创建学生结构体变量

struct student s = { "张三",13,30 };
student* p = &s;//等号左右应该一样的数据类型
cout << "姓名为" << p->name << " 年龄" << p->age << " 分数" << p->score << endl;

结构体嵌套结构体

结构体中的成员可以说另一个结构体

老师信息传入

    teacher t;
    t.id = 1000;
    t.name = "jjj";
    t.age = 30;
    t.stu.name = "sss";//老师学生的信息

结构体做函数参数

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

值传递与地址传递

将学生信息传入

    struct student s;
    s.name = "张三";
    s.age = 18;
    s.score = 100;

打印

    printstudent1(s);
    printstudent2(&s);
    cout<<"main函数中打印"<<s.name<< " 年龄" << s.age << " 分数" << s.score << endl;
    //地址传递会改变主函数数据

结构体中const使用场景

用const防止误操作

void printstudent3(const student *s)
    {
        //将函数中的形参改为指针,可以减少内存空间,而且不会复制新的副本出来
        //s->age = 99;//此处错误,加入const后const使得student不会被改变,可以防止误操作
        cout << " 名字 " << s->name
            << "  年龄 " << s->age 
            << "  分数 "<< s->score << endl;
    }
printstudent3(&s);

在Qt中,结构体(struct)和结构体指针(struct pointer)与C++中的用法类似。 结构体(struct)是一种自定义的数据类型,可以将多个不同类型的变量组合在一起,形成一个单独的数据单元。在Qt中,可以使用结构体来表示一组相关的数据。 以下是一个示例,展示了如何定义和使用一个结构体: ```cpp #include <iostream> #include <QString> struct Person { QString name; int age; }; int main() { Person person; person.name = "John"; person.age = 25; std::cout << "Name: " << person.name.toStdString() << std::endl; std::cout << "Age: " << person.age << std::endl; return 0; } ``` 在上面的示例中,我们定义了一个名为 `Person` 的结构体,它包含了一个 `QString` 类型的 `name` 变量和一个 `int` 类型的 `age` 变量。然后,在 `main()` 函数中,我们创建了一个名为 `person` 的结构体对象,并对其成员变量进行赋值。最后,我们使用 `std::cout` 将成员变量的值打印到控制台。 结构体指针(struct pointer)是指向结构体对象的指针。通过使用指针,可以动态地分配和访问结构体对象。在Qt中,可以使用指针操作符 `->` 来访问结构体指针所指向的成员。 以下是一个示例,展示了如何定义和使用一个结构体指针: ```cpp #include <iostream> #include <QString> struct Person { QString name; int age; }; int main() { Person* personPtr = new Person; personPtr->name = "John"; personPtr->age = 25; std::cout << "Name: " << personPtr->name.toStdString() << std::endl; std::cout << "Age: " << personPtr->age << std::endl; delete personPtr; // 释放内存 return 0; } ``` 在上面的示例中,我们定义了一个名为 `personPtr` 的结构体指针,并使用 `new` 运算符动态地分配了一个 `Person` 结构体对象。然后,我们通过指针操作符 `->` 访问结构体指针所指向的成员变量,并对其进行赋值。最后,我们使用 `delete` 运算符释放了通过 `new` 分配的内存。 需要注意的是,在使用结构体指针时,必须确保在不再使用该对象时释放内存,以避免内存泄漏。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值