首页 > 系统相关 >结构体如何使用指针呢?两种方法,第一种是静态内存管理,不能用delete回收内存。第二种,使用new申请结构体的内存空间。通过结构体指针,访问结构体的成员,要使用的符号是什么呢?->

结构体如何使用指针呢?两种方法,第一种是静态内存管理,不能用delete回收内存。第二种,使用new申请结构体的内存空间。通过结构体指针,访问结构体的成员,要使用的符号是什么呢?->

时间:2024-09-03 18:26:11浏览次数:13  
标签:name 成员 内存 Student 结构 指针

问题描述:

根据下列代码和结果回答下列问题。

代码:

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

int main()
{
    struct Student
    {
        string name;
        int age;
        string gender;
    };

    // 先创建一个标准的结构体对象(静态内存管理)
    struct Student stu = {"周杰轮", 11, "男"};
    // 创建结构体的指针,指向结构体对象的地址
    struct Student * p = &stu;
    // 通过结构体指针,访问结构体的成员,要使用的符号是:->
    cout << "结构体中成员的name:" << p->name << endl;
    cout << "结构体中成员的age:" << p->age << endl;
    cout << "结构体中成员的gender:" << p->gender << endl;


    // 通过new操作符,申请结构体的空间
    struct Student * p2 = new Student {"林军杰", 21, "男"};
    cout << "结构体2中成员的name:" << p2->name << endl;
    cout << "结构体2中成员的age:" << p2->age << endl;
    cout << "结构体2中成员的gender:" << p2->gender << endl;

    delete p2;


    return 0;
}
D:\CLion_code\cmake-build-debug\CLion_code.exe
结构体中成员的name:周杰轮
结构体中成员的age:11
结构体中成员的gender:男
结构体2中成员的name:林军杰
结构体2中成员的age:21
结构体2中成员的gender:男

Process finished with exit code 0

结构体如何使用指针呢?两种方法,第一种是静态内存管理,不能用delete回收内存。第二种,使用new申请结构体的内存空间。通过结构体指针,访问结构体的成员,要使用的符号是什么呢?-> 

问题解答:

 

在C++中,通过指针访问结构体成员时,使用的符号是 ->。这个符号是成员访问操作符,用于指针指向的结构体或类的成员访问。

根据代码的内容和结果:

  1. 静态内存管理的结构体指针

    struct Student stu = {"周杰轮", 11, "男"};
    struct Student * p = &stu;
    

    在这段代码中,结构体 stu 是通过静态内存管理创建的,指针 p 指向这个结构体。通过指针 p 访问结构体的成员时,使用 -> 操作符:

    p->name, p->age, p->gender
    

  2. 动态内存管理的结构体指针

    struct Student * p2 = new Student {"林军杰", 21, "男"};
    

    在这段代码中,使用 new 操作符动态分配了一个结构体 Student 的内存,并将其地址赋给指针 p2。通过指针 p2 访问结构体的成员时,同样使用 -> 操作符:

    p2->name, p2->age, p2->gender
    

总结:

  • 静态内存管理 中,不能使用 delete 来回收内存,因为对象是在栈上分配的,系统会自动管理其生命周期。
  • 动态内存管理 中,需要使用 delete 来释放内存,否则会导致内存泄漏。

通过指针访问结构体成员时,正确的操作符是 ->

 

标签:name,成员,内存,Student,结构,指针
From: https://blog.csdn.net/weixin_43501408/article/details/141868615

相关文章

  • 请问结构体数组是如何进行定义的呢?定义方法分为两种,第一种是声明和赋值分开进行的。第
    问题描述:根据下列代码回答下列问题。//Createdby黑马程序员.#include"iostream"usingnamespacestd;intmain(){structStudent{stringname;intage;stringgender;};structStudentarr[3];//结构体......
  • 结构体成员的默认值是如何使用的呢?可以对默认值进行修改吗?
    问题描述:根据下列代码和结果回答下列问题。//Createdby黑马程序员.#include"iostream"usingnamespacestd;intmain(){structStudent{stringname;//成员1,姓名stringmajor_code="003032";//成员2专业代码,拥有默认值0......
  • 【JavaEE初阶】JVM内存划分和类加载过程以及垃圾回收
    目录......
  • 使用 Monai Bundle 和 Model Zoo 对医学影像数据进行分类-全脑133个结构分割
    使用MonaiBundle和ModelZoo对医学影像数据进行分类-全脑133个结构分割文章目录导读MonaiBundle和ModelZoo简单介绍基于monaibundle的MRI全脑分割模型简介模型描述模型训练细节训练数据注意事项电脑配置完整的133个脑结构列表在3Dslicer使用全脑结构分割模型完整的133......
  • 搞懂Transformer结构,看这篇PyTorch实现就够了
    前言下面分享一篇实验室翻译的来自哈佛大学一篇关于Transformer的详细博文。“AttentionisAllYouNeed”[1]一文中提出的Transformer网络结构最近引起了很多人的关注。Transformer不仅能够明显地提升翻译质量,还为许多NLP任务提供了新的结构。虽然原文写得很清楚,但实际上大家普......
  • JVM面试(二)内存区域划分
    内存区划分Java虚拟机在执行Java程序的过程中会把它锁管理的内存划分为若干个不同的数据区域。这些区域有各自不同的用途,以及创建和销毁的时间。有的区域随着虚拟机的进程一直存在,有的区域依赖用户线程的启动和结束而建立和销毁。根据《Java虚拟机规范》的规定,Java虚拟......
  • PLC结构化文本(ST)——继承(inheritance)
    PLCStructuredTextObjectOrientedProgrammingPLC结构化文本(ST)——继承(inheritance)继承的概念继承是面向对象程序设计中最重要的概念之一。继承允许我们根据一个类来定义另一个类,这使得创建和维护应用程序变得更容易。同时也有利于重用代码和节省开发时间。当创建一个类......
  • Java内存泄露诊断与预防策略
    Java内存泄露诊断与预防策略大家好,我是微赚淘客返利系统3.0的小编,是个冬天不穿秋裤,天冷也要风度的程序猿!在Java应用开发中,内存泄露是一个常见且棘手的问题。它不仅会导致应用性能下降,还可能引起应用崩溃。因此,了解如何诊断和预防内存泄露至关重要。内存泄露的定义内存泄露发生......
  • 【c】结构体内存对齐的规则
    规则一、成员变量内存相对起始位置为数据类型所占内存的整数倍(例如:int类型数据相对起始位置必须是结构体中4字节的整数倍),若不足则需要对齐不足部分的内存(内存补充给前一个变量)。二、结构体所占总内存为其成员变量中所占空间最大数据类型的整数倍。三、结构体中每个成员相对......
  • 单片机内存区域划分
    目录一、C语言内存分区1、栈区2、堆区3、全局区(静态区)4、常量区5、代码区6、总结二、单片机存储分配1、存储器1.1RAM1.2ROM1.3FlashMemory1.4不同数据的存放位置2、程序占用内存大小一、C语言内存分区C语言在内存中一共分为如下几个区域,分别是:下面分别......