结构体如何使用指针数组呢?通过结构体指针数组,访问结构体指针数组的成员,要使用的符号是什么呢?

问题描述:

根据下列代码回答下列问题。

代码:

// Created by 黑马程序员.
#include "iostream"
using namespace std;

int main()
{
    struct Student
    {
        string name;
        int age = 11;
        string gender = "男";
    };
    struct Student arr1[3] = {{"周杰轮"}, {"林军杰"}, "王力鸿"};
    struct Student * p1 = arr1;     // 数组的对象本质上就是地址(指向数组的第一个元素的位置)
    cout << "数组的第一个元素中记录的name是:" << p1[0].name << endl;
    cout << "数组的第二个元素中记录的name是:" << p1[1].name << endl;
    cout << "数组的第三个元素中记录的name是:" << p1[2].name << endl;

    // 通过new操作符,自行申请结构体数组的空间(可以通过delete回收)
    struct Student * p2 =
            new Student[3] {{"周杰轮"}, {"林军杰"}, {"王力鸿"}};

    cout << "数组2的第一个元素中记录的name是:" << p2[0].name << endl;
    cout << "数组2的第二个元素中记录的name是:" << p2[1].name << endl;
    cout << "数组2的第三个元素中记录的name是:" << p2[2].name << endl;

    delete[] p2;

    return 0;
}

结果:

D:\CLion_code\cmake-build-debug\CLion_code.exe
数组的第一个元素中记录的name是:周杰轮
数组的第二个元素中记录的name是:林军杰
数组的第三个元素中记录的name是:王力鸿
数组2的第一个元素中记录的name是:周杰轮
数组2的第二个元素中记录的name是:林军杰
数组2的第三个元素中记录的name是:王力鸿

Process finished with exit code 0

问题描述:

问题描述: 结构体如何使用指针数组呢?结构体同样可以使用指针数组,主要用于动态内存分配,方便管理大量结构体占用的内存。两种方法,第一种是静态内存管理,不能用delete回收内存。第二种,使用new申请指针数组的内存空间。通过结构体指针数组,访问结构体指针数组的成员,要使用的符号是什么呢?使用点因为p1[0]其实就是相当于*(p+0),这样就会解引用找到第一个元素结构体,那都是结构体了,肯定是用点而不是->

问题解答:

在使用结构体指针数组时,访问结构体成员的方式取决于你如何引用结构体数组中的元素。根据你的代码和问题描述,这里有两个关键点需要明确:

1. 静态内存管理(数组的对象在栈上分配内存)

在静态内存管理中,结构体数组 arr1 是直接在栈上分配的。指针 p1 指向数组的第一个元素。由于 p1 是指向结构体数组的指针,因此可以使用下标 [] 直接访问数组元素。

struct Student * p1 = arr1;  // p1 指向数组的第一个元素

这里 p1[0] 就是访问数组的第一个元素的结构体对象。因为 p1[0] 已经是一个结构体对象了,所以通过 . 操作符来访问结构体成员:

p1[0].name, p1[1].name, p1[2].name

2. 动态内存管理(使用 new 申请内存)

在动态内存管理中,结构体数组 p2 是使用 new 操作符在堆上分配的,因此可以通过 delete[] 来释放这块内存。

struct Student * p2 = new Student[3] {{"周杰轮"}, {"林军杰"}, {"王力鸿"}};

p2 也是指向结构体数组的指针,因此同样可以使用下标 [] 来访问结构体数组中的元素,再通过 . 操作符访问具体的成员:

p2[0].name, p2[1].name, p2[2].name

总结:

  • 通过指针访问结构体数组的元素时,p1[i]p2[i] 代表指向结构体数组中第 i 个元素的结构体对象。
  • 既然 p1[i]p2[i] 是结构体对象,所以要通过 . 操作符来访问结构体的成员,如 p1[i].namep2[i].name

核心理解

  • 如果指针指向的是结构体对象(即 p1[i] 是结构体对象),就使用 . 操作符访问成员。
  • 如果指针直接指向结构体的地址(即 p 是指向结构体的指针),则使用 -> 操作符访问成员。

在你的问题中,由于 p1[i]p2[i] 都是结构体对象,所以使用 . 操作符来访问它们的成员。

 

 

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

神笔馬良

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值