【带头学C++】----- 六、结构体 ---- 6.1 结构体概述

news2024/12/23 5:07:07

6.1 结构体概述(struct

       结构体(struct)是C++中用于自定义数据类型的一种机制,它允许将多个不同类型的变量(成员变量)组合在一起形成一个新的数据类型。结构体允许程序员创建一个包含不同数据类型的复合数据类型,并能够方便地使用这些数据。

 例如:学生类有 stunum、name、age、sex、addr、phone等不同类型的属性;

对于以上数据类型进行定义

    int stunum;
    char name[20];
    int age;
    char sex;
    char addr[30];
    char phone[11];

可以得到以上不同数据类型的成员变量,这些属性构成了一个学生这个基类对象。

6.1.1 结构体类型的定义 

语法:

struct 结构体类型名

{

      成员列表;

};  //  注意此处有分号

 例如对应1中的问题进行定义一个结构体:

// 定义学生结构体
//系统不会为结构体类型开辟空间 只会为结构体类型定义的变量开辟空间
struct Student {
    //int stunum = 1001; 此时是非法的,不要对结构体变量初始化(后续再结合C++11、17、20讲)
    int stunum;//正常定义的结构体成员变量
    char name[20];
    int age;
    char sex;
    char addr[30];
    char phone[11];
};

//结构体成员拥有独立的内存空间

//定义结构体类型的变量

Student Tom;//Tom此时就是为结构体变量名,后续对该变量名进行操作

Student Jery;

千锋教育C++基础班笔记截图(后续此类截图不再声明)


6.2 结构体变量的操作

6.2.1 结构体变量的初始化

结构体变量的初始化 必须遵循成员的顺序以及成员自身的数据类型

下例中未初始化结构体,此时输出正常来说是乱码的,无效的,错误的一种输出。

接着我们进行初始化结构体变量: 

骚操作:重载了<<操作符,使其能够直接输出Student结构体对象。当你调用cout << Tom;时,重载的<<操作符会被调用,从而实现直接输出结构体对象 Tom 的功能。


6.2.2 清空整个结构体变量

1.使用memset()函数清空

//函数原型

void* __cdecl memset(
    _Out_writes_bytes_all_(_Size) void* _Dst,  
    _In_ int _Val,
   _In_ size_t _Size
);

//之前可能是这样的

void *memset(void *_Dst,int _Val,size_t _Size);

//将从_Dst开始的长度为_Size的所有字节赋值为_Val

扩展:_Out_writes_bytes_all_(_Size) 注解表示函数将使用参数向外写入指定数量的字节数据。这有助于编译器验证参数的使用方式,并帮助静态代码分析工具识别函数可能产生的影响。在这种情况下,memset 函数的 _Out_writes_bytes_all_(_Size) 注解告诉编译器,_Dst 参数将用于向外写入 _Size 字节的数据,这有助于编译器进行更准确的优化和分析。

案例:

struct Person {
    int age;
    char name[20];
};
Person person1 = {25, "Alice"};

//对于以上定义的结构初始化的变量进行清空
memset(&person, 0, sizeof(person)); // 将结构体所有成员的内存块都设置为 0

//此时的person1的参数尽管已经初始化过了,但使用memse后仍然是0或者空

使用上面章节的案例:进行memset清空操作 

     清空后: 

2.逐个赋值

person.age = 0;
strcpy(person.name, "");

3.编写清空函数

void clearPerson(Person& person) {
    person.age = 0;
    strcpy(person.name, "");
}

6.2.3 键盘给结构体变量中成员赋值

注意:类型顺序输入别输入反了


6.2.4 可以单独操作结构体中成员

需要注意的是,单独操作时要注意遵循结构体自身的类型


6.2.5 相同类型的结构体变量之间赋值方法

方法1:

方法2:结构体类型一致直接赋值

 

方法3:使用memcpy函数,内存拷贝 

 


6.3 结构体嵌套结构体

结构体嵌套结构体要注意一定要访问到最底层,下面的Student的结构体里面嵌套了Date,访问时候,先访问最外层的Student的lucy,然后再访问lucy里面的ob对象,在访问到year、month等变量。


6.4结构体数组

结构体数组:本质是数组,数组的元素为结构体变量


6.4.1结构体数组的定义


6.4.2 键盘给结构体数组赋值



 

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

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

相关文章

HPV转阴如何合理饮食,对此HPV专家谭巍主任提出自己看法

HPV感染不是小事&#xff0c;如果体内长期携带病毒不转阴&#xff0c;则有可能引发一系列病变。但在HPV转阴方面饮食有着不可或缺的作用&#xff0c;合理饮食对于促进HPV转阴至关重要。而关于HPV人群合理饮食问题&#xff0c;劲松HPV防治诊疗中心主任谭巍将提出一些建议&#x…

数据同步工具调研选型:SeaTunnel 与 DataX 、Sqoop、Flume、Flink CDC 对比

产品概述 Apache SeaTunnel 是一个非常易用的超高性能分布式数据集成产品&#xff0c;支持海量数据的离线及实时同步。每天可稳定高效同步万亿级数据&#xff0c;已应用于数百家企业生产&#xff0c;也是首个由国人主导贡献到 Apache 基金会的数据集成顶级项目。 SeaTunnel 主…

【shardingjdbc】sharding-jdbc分库分表入门demo及原理分析

文章目录 场景配置&#xff1a;概念及原理:代码:思考: 本文中&#xff0c;demo案例涉及场景为sharding jdbc的分库情况。 通俗点说就是由原来的db0_table水平拆分为 db1 t_table &#xff0c;db2.t_table。 demo本身很简单&#xff0c;难点在于分片策略配置到底该怎么写&#x…

宝马所有发动机号码的位置以及型号说明

每个汽车制造商都会为自己生产的汽车底盘和发动机分配一个内部代码&#xff0c;以标识研发和生产项目&#xff0c;而宝马对这些底盘代码和发动机代码更是规划的井井有条&#xff0c;比如发动机有M、N、B、S、P或W等代码标识&#xff0c;而底盘和车身则有E、F、G或i等代码标识。…

2FRE16-43/160LBK4M比例流量阀放大器

比例阀控制放大器技术是电液比例系统中的一个重要组成部分&#xff0c;它主要负责对比例阀进行控制。这种技术可以实现对液压流量或压力的精确控制&#xff0c;从而使系统以更高的精度和更快的响应速度执行各种操作。 比例阀控制放大器主要由三个部分组成&#xff1a;比例阀、…

58 权限提升-网站权限后台漏洞第三方获取

目录 当前知识点在渗透流程中的点当前知识点在权限提升的重点当前知识点权限提升权限介绍利用成功后的思想需要总结的思路演示案例:某挂壁程序后台权限提升-后台功能某BC广告导航页权限提升-漏洞层面苏丹大西瓜GlassFish中间件-第三方 涉及资源 这里包括网站权限、其它权限、系…

自己搭设开源密码管理工具 bitwarden

简介 Bitwarden是一款自由且开源的密码管理服务&#xff0c;用户可在加密的保管库中存储敏感信息&#xff08;例如网站登录凭据&#xff09;。Bitwarden平台提供有多种客户端应用程序&#xff0c;包括网页用户界面、桌面应用&#xff0c;浏览器扩展、移动应用以及命令行界面。[…

老卫带你学---go语言net/http原理解析

go语言net/http原理解析 对于golang&#xff0c;实现一个最简单的http server 非常简单&#xff0c;代码如下&#xff1a; package mainimport ("net/http""fmt" )func Indexhandler(w http.ResponseWriter,r *http.Request) {fmt.Fprintln(w,"hel…

【操作系统】内存的连续分配管理

文章目录 前言连续分配管理的方式单一连续分配固定分区分配动态分区分配如何记录内存的使用情况如何选择分区如何对分区进行回收 前言 当我们的进程在完成编译以后&#xff0c;需要装入内存&#xff0c;此时就有两种方式来进行内存的分配&#xff1a;连续分配、非连续分配。 …

CNKI上最新硕士博士论文pdf格式文件owner密码找回难度

听人说CNKI上比较早期的硕士博士论文pdf格式文件密码修改权限Owner密码是123456&#xff0c;想办法找了几个文件试了试果然如此。 但又听人说CNKI上最新硕士博士论文pdf格式文件owner密码已经不是了。虽然直接移除这种密码的工具到处都是&#xff0c;推测一下新增的owner密码及…

高并发场景下,如何设计订单库存架构,一共9个关键性问题

库存系统可以分为实物库存和虚拟库存两种类型。实物库存的管理涉及到采购、存储、销售和库存轮换等复杂的活动&#xff0c;需要进行供应链管理和仓库管理等工作。相比之下&#xff0c;虚拟库存的管理相对简单&#xff0c;主要适用于线上资源的数量管理&#xff0c;包括各类虚拟…

Python自动化测试之request库详解(一)

在做接口测试&#xff0c;接口自动化测试的时候都会用到很多工具&#xff0c;如postman、jmeter、pytest等工具&#xff0c;除了这些工具外&#xff0c;我们也会用python的第3方库requests来做接口测试。接下来我会专门讲request的系列专题&#xff0c;希望大家能学好request库…

Ansys Lumerical | 用于增强现实系统的表面浮雕光栅

在本示例中&#xff0c;我们使用 RCWA 求解器设计了一个斜面浮雕光栅 (SRG)&#xff0c;它将用于将光线耦合到单色增强现实 (AR) 系统的波导中。光栅的几何形状经过优化&#xff0c;可将正常入射光导入-1 光栅阶次。 然后我们将光栅特性导出为 Lumerical Sub-Wavelength Model …

八个开源免费单点登录(SSO)系统

使用SSO服务可以提高多系统使用的用户体验和安全性&#xff0c;用户不必记忆多个密码、不必多次登录浪费时间。下面推荐一些市场上最好的开源SSO系统&#xff0c;可作为商业SSO替代。 单点登录&#xff08;SSO&#xff09;是一个登录服务层&#xff0c;通过一次登录访问多个应…

通配符SSL证书

通配符SSL证书是一种特殊的数字证书&#xff0c;用于在互联网上建立安全的连接&#xff0c;其特点是可以保护多个子域名&#xff0c;并且具有很高的兼容性和扩展性。本文将详细介绍通配符SSL证书的相关概念、优点和应用等。 首先&#xff0c;我们需要了解什么是SSL证书。 SSL证…

听我的,日志还是得好好打!

大家好&#xff0c;我是老三&#xff0c;不知道大家有没有经历过这样的场景&#xff0c;线上出了问题&#xff0c;着急火燎地去排查&#xff1a; 唉&#xff0c;问题可能出在这个地方&#xff0c;捞个日志看下&#xff0c;卧槽&#xff0c;怎么找不到……哪个**不打日志&#…

打破语言壁垒,实现全球商贸:多语言多商户跨境商城源码引领电商新潮流

随着全球化的不断深入&#xff0c;电子商务的蓬勃发展&#xff0c;传统的单语言电商模式已经无法满足日益多元化的市场需求。多语言多商户跨境商城源码&#xff0c;一种创新的电商解决方案&#xff0c;应运而生。它打破了语言和地域的限制&#xff0c;让全球的商家和消费者都能…

c语言函数指针 指针函数

指针数组 数组指针 指针数组 数组指针 Int * br[3] {&a,&b,&c}; Int (*pl)[3] &arr; Int a1;int c 2; int c3; Int arr[3] {a,b,c}; Int* br[3] {&a,&b,&c}; Int* br[3] {&a,&b,&c}; //指针数组 Int (*p)[3] &arr…

新品 | 飞凌嵌入式FCU2601工商业储能EMS能量控制单元发布

FCU2601嵌入式控制单元是飞凌嵌入式为锂电池储能行业设计的EMS能量控制单元产品&#xff0c;设计兼具高性能&#xff0c;多接口&#xff0c;低功耗&#xff0c;广泛满足各类储能系统的本地能源管理应用需求。 FCU2601嵌入式控制单元综合考虑到了储能行业不同场景的差异化需求&…

1x1卷积核

1 1 1\times 1 11卷积核对输入数据的通道做约简。 每个 1 1 1\times 1 11卷积核相当于在输入数据的通道上做了一个降维&#xff08;经过一个神经元个数为1的全连接层&#xff09;&#xff0c;从而相当于大幅度降低了特征图的数量&#xff0c;但不影响特征图的结构。 使用 1 …