C++—结构体

news2025/1/16 11:11:14

结构体(struct),是一种用户自定义复合数据类型,可以包含不同类型的不同成员。

结构体的声明定义和使用的基本语法:

// 声明结构体struct 结构体类型
{    
    成员1类型 成员1名称;    
                    ...
    成员N类型 成员N名称;
};

除声明外,struct关键字可省略

成员的访问可以通过 . 来进行

结构体成员默认值

在设计一个结构体的时候,可以根据需要向成员设置默认值

如果结构体中的变量,比如name、major_code、dormitory没有被指定,那么程序就会输出默认值结构体数组

作为用户自定义数据类型,结构体是支持数组模式的。

// 声明数组对象
[struct] 结构体类型 数组名[数组长度];
// 赋值数组的每一个元素
数组名[0] = {, , ..., };
数组名[1] = {, , ..., };
...
// 声明和赋值同步的快捷写法
[struct] 结构体类型 数组名[数组长度] = {{}, {}, ..., {}};

结构体指针

作为一种数据类型,结构体也是支持使用指针的。

结构体同样可以使用指针数组,主要用于动态内存分配,方便管理大量结构体占用的内存。

struct Student
{
    string name;
    string major_code = "003032";       // 默认专业代码
    int dormitory_num = 1;              // 默认分配1号楼宿舍
};

    struct Student stu = {"周杰轮", "003001", 5};
    struct Student *p = &stu;

通过new操作符申请指针空间

struct Student *p = new Student {"周杰轮", "003001", 5};

使用指针变量访问结构体成员需要更换操作符号为:->

cout << p->name << endl;            // 访问成员name
cout << p->major_code << endl;      // 访问成员
major_codecout << p->dormitory_num << endl;   // 访问成员dormitory_num

举例:

#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;
}

其中,

struct Student * p1 = arr1; 

这个可以直接赋值的原因在于arr1表示的是数组,数组就是地址所所以可以直接赋值。

delete[] p2;

在删除空间地址的时候,需要[ ]这个符号是因为处理的是数组。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1682893.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

rockylinux 利用nexus 搭建私服yum仓库

简单说下为啥弄这个私服&#xff0c;因为自己要学习一些东西&#xff0c;比如新版的k8s等&#xff0c;其中会涉及到一些yum的安装&#xff0c;为了防止因网络问题导致yum安装失败&#xff0c;和重复下载&#xff0c;所以弄个私服&#xff0c;当然也有为了意外保障的想法&#x…

网络安全技术与应用:远程控制与数据库安全

实验准备 软件&#xff1a;VMware Workstation Pro 虚拟机&#xff1a;Red Hat Enterprise Linux 7 服务器&#xff0c;Red Hat Enterprise Linux 7 客户端 网络模式&#xff1a;NAT模式 1、配置服务器及客户端网络 服务器IP 客户端IP 测试相互通信 在客户机上设置镜像&#…

nssctf——web

[SWPUCTF 2021 新生赛]gift_F12 1.打开环境后&#xff0c;这里说要900多天会有flag&#xff0c;这是不可能的 2.f12查看源码&#xff0c;然后在html中查找flag &#xff08;在最上方的栏目中&#xff0c;或者按ctrlf&#xff09; [SWPUCTF 2021 新生赛]jicao 1.打开环境是一段…

【MySQL】MySQL的安装和基本概念

MySQL的安装和基本概念 一、环境安装1、环境及配置2、下载安装 二、基本概念1、主流数据库2、mysql和mysqld的区别和概念&#xff08;1&#xff09;概念1&#xff1a;了解CS结构&#xff08;2&#xff09;概念2&#xff1a;数据库指的是什么&#xff08;3&#xff09;概念3&…

模板中的右值引用(万能引用)、引用折叠与完美转发

模板中的右值引用&#xff08;万能引用&#xff09;、引用折叠与完美转发 文章目录 模板中的右值引用&#xff08;万能引用&#xff09;、引用折叠与完美转发一、万能引用与引用折叠1. 模板中的右值引用2. 自动类型推导(auto)与万能引用3. 引用折叠与万能引用4. lambda表达式捕…

巨某量引擎后台登录实战笔记 | Playwright自动化框架

前言 本文章中所有内容仅供学习交流&#xff0c;抓包内容、敏感网址、数据接口均已做脱敏处理&#xff0c;严禁用于商业用途和非法用途&#xff0c;否则由此产生的一切后果均与作者无关&#xff0c;若有侵权&#xff0c;请联系我立即删除&#xff01; 入正题看看滑块是怎么个事…

数字孪生项目开发流程

数字孪生&#xff08;Digital Twin&#xff09;项目的开发流程涉及多个步骤&#xff0c;从初始概念到最终部署和维护。以下是一个典型的数字孪生项目开发流程&#xff0c;通过这些步骤&#xff0c;开发团队可以有效地规划、设计、开发和维护数字孪生项目&#xff0c;确保其在实…

YOLOv5 Exception: Dataset not found.

在使用yolo v5训练时弹出了这个报错&#xff0c;就是没有找到数据集&#xff0c;dataset.yaml文件里面的train 和val 的路径配置不对&#xff0c;开始我是使用相对路径&#xff0c;后面修改成绝对路径就可以了

Ubuntu23.04开机时whoopsie-upload-all占用CPU 100%,风扇狂转

Ubuntu23.04开机时&#xff0c;风扇狂转散热&#xff0c;打开终端&#xff0c;输入top -c&#xff0c;查看占用cpu最高的进程&#xff0c;发现是python3在执行whoopsie-upload-all脚本文件。 什么是whoopsie&#xff1f; 这是“Ubuntu错误报告”守护程序&#xff0c;默认安装在…

DAB协议解读ETSI TS 103 461

一、说明 数字信号广播&#xff08; Digital Audio Broadcasting 简称DAB&#xff09;是继AM、FM传统模拟广播之后的第三代广播--数字信号广播&#xff0c;它提供了接近CD质量的声音&#xff0c;广播及商机无限的附加数据服务&#xff0c;具有抗噪声、抗干扰、抗电波传播衰落、…

采用LoRA方法微调llama3大语言模型

文章目录 前言一、Llama3模型简介1.下载llama3源码到linux服务器2.安装依赖3.测试预训练模型Meta-Llama-3-8B4.测试指令微调模型Meta-Llama3-8B-Instruct5.小结 二、LoRA微调Llama31.引入库2.编写配置文件3.LoRA训练的产物 三、测试新模型效果1.编写配置文件2.运行配置文件&…

(Qt) 默认QtWidget应用包含什么?

文章目录 ⭐前言⭐创建&#x1f6e0;️选择一个模板&#x1f6e0;️Location&#x1f6e0;️构建系统&#x1f6e0;️Details&#x1f6e0;️Translation&#x1f6e0;️构建套件(Kit)&#x1f6e0;️汇总 ⭐项目⚒️概要⚒️构建步骤⚒️清除步骤 ⭐Code&#x1f526;untitled…

Arcpy安装和环境配置

一、前言 ArcPy 是一个以成功的arcgisscripting 模块为基础并继承了arcgisscripting 功能进而构建而成的站点包。目的是为以实用高效的方式通过 Python 执行地理数据分析、数据转换、数据管理和地图自动化创建基础。该包提供了丰富纯正的 Python 体验&#xff0c;具有代码自动…

思维导图-VPN

浏览器集成了受信任的机构的证书

解决word里加入mathtype公式后行间距变大

1.布局>页面设置>文档网格&#xff0c;网格栏选为无网格 2.固定间距

数据库|基于T-SQL创建数据库

哈喽&#xff0c;你好啊&#xff0c;我是雷工&#xff01; SQL Server用于操作数据库的编程语言为Transaction-SQL,简称T-SQL。 本节学习基于T-SQL创建数据库。以下为学习笔记。 01 打开新建查询 首先连接上数据库&#xff0c;点击【新建查询】打开新建查询窗口&#xff0c; …

Linux基础命令[27]-gpasswd

文章目录 1. gpasswd 命令说明2. gpasswd 命令语法3. gpasswd 命令示例3.1 不加参数3.2 -a&#xff08;将用户加入组&#xff09;3.3 -d&#xff08;从组中删除用户&#xff09;3.4 -r&#xff08;删除组密码&#xff09;3.5 -M&#xff08;多个用户一起加入组&#xff09;3.6 …

23种设计模式(持续输出中)

一.设计模式的作用 设计模式是软件从业人员长期总结出来用于解决特定问题的通用性框架&#xff0c;它提高了代码的可维护性、可扩展性、可读性以及复用性。 二.设计模式 1.工厂模式 工厂模式提供了创建对象的接口&#xff0c;而无需制定创建对象的具体类&#xff0c;工厂类…

kafka集群跨区域跨集群同步方案MirrorMaker1 —— 筑梦之路

MirrorMaker原理架构 数据流向 上图也是一种比较常见的用法&#xff0c;这里作为记录。下面介绍一则实战案例。 网络架构 配置日志采集器filebeat 配置从哪里采集日志 输出到kafka集群 配置MirrorMaker消费者 参数说明&#xff1a; bootstrap.servers 指定消费哪个kafka的数…

【HarmonyOS4学习笔记】《HarmonyOS4+NEXT星河版入门到企业级实战教程》课程学习笔记(八)

课程地址&#xff1a; 黑马程序员HarmonyOS4NEXT星河版入门到企业级实战教程&#xff0c;一套精通鸿蒙应用开发 &#xff08;本篇笔记对应课程第 15 节&#xff09; P15《14.ArkUI组件-状态管理state装饰器》 回到最初的 Hello World 案例&#xff0c;首先验证 如果删掉 State…