C++初学(9)
9.1、结构简介
虽然数组能够和存储多个元素,但所有元素必须相同,也就是说,同一个数组不能既存放int类型也存放float类型,而C++的结构可以满足要求。结构是一种比数组更灵活的数据格式,因为同一个结构可以存储多种类型的数据。
下面给个结构:
struct inflatable
{char name[20];float volume;double price;
};
关键字struct表明,这些代码定义的是一个结构。标识符inflatable是这种数据格式的名称,因次新类型的名称为inflatable。这样就可以像创建char或int类型那样创建inflatable类型的变量。该结构里面的char数组、一个float和一个double每一项都被称为结构成员。
inflatable hat;
inflatable woopie_cushion;
inflatable mainframe;
C++允许在声明变量中时省略关键字struct,在C++中,结构标记的用法与基本类型名相同。
由于hat的类型是inflatable,因此可以用成员运算符(.)来访问各个成员。hat是一个结构,hat.price是一个double类型的变量,可以通过成员名来访问结构的成员。
9.1.1、在程序中使用结构
下面给一个程序:
#include <iostream>
struct inflatable
{char name[20];float volume;double price;
};int main()
{using namespace std;inflatable guest ={"Glorious Gloria",1.88,29.99};inflatable pal ={"Audacious Arthur",3.12,32.99};cout << "Expand your guest list with " << guest.name;cout << " and " << pal.name << "!" << endl;cout << "You can have both for $";cout << guest.price + pal.price << "!" << endl;return 0;
}
结构声明的位置很重要。对于程序来说,有两种选择。一种是将声明放在main()函数中,紧跟在开始括号的后面;另一种选择是将声明放到main()的前面。
该程序用的是第二种,被称为外部声明(当然还有一种说法是全局声明)。第一种则被称为内部声明。两者来说差别挺大的,外部声明可以被其后面的任意函数使用,而内部声明只能被该声明所属的函数使用。因此我们一般用外部声明。
结构的初始化方式:
inflatable guest =
{"Glorious Gloria",1.88,29.99
};
和数组一样,使用有逗号分隔值列表,并将这些值用花括号括起。在该程序中,每个值占一行,但也可以将它们全部放到同一行中。只是应用逗号将它们分开:
inflatable duck={"Daphne",0.12,9.98};
9.1.2、C++11结构初始化
与数组一样,C++也支持将列表初始化用于结构,且等号(=)是可选的:
inflatable duck{"Daphne",0.12,9.98};
如果大括号内没有任何东西,各个成员都将被设置为0。
9.1.3、结构可以将string类作为成员吗
答案是可以的。一定要让结构定义能够访问名称空间std。可以将using namespace std;放到结构初始化前面,或者将name的类型声明为std::string。
9.1.4、其他结构属性
C++可以将结构作为参数传递给函数,也可以让函数返回一个结构。另外,还可以使用赋值运算符(=)将结构赋给另一个同类型的结构,这样结构中每个成员都被设置为另一个结构中相应成员的值,即使成员是数组。这种赋值被称为成员赋值。
下面给一段代码:
#include <iostream>
struct inflatable
{char name[20];float volume;double price;
};
int main()
{using namespace std;inflatable bouquet ={"sunflowers",0.20,12.49};inflatable choice;cout << "bouquet: " << bouquet.name << " for $";cout << bouquet.price << endl;choice = bouquet;cout << "choice: " << choice.name << " for $";cout << choice.price << endl;return 0;
}
从中可以看出,成员赋值是有效的,因为choice结构的成员值和bouquet结构中的值相同。
如果需要同时完成定义结构和创建结构变量的工作,只需要将变量名放在结束括号的后面即可:
struct perks
{int key_number;char car[10];
}my_smith,my_opinion;
然而将结构变量和变量声明分开,可以使程序更易于阅读和理解。C语言介绍结构体时应该会教一下创建单独的结构变量,后面可能不会这么创建。
9.1.5、结构数组
inflatable结构包含一个数组,当然我们也可以创建元素为结构的数组,方法和创建基本类型数组完全相同。例如:
inflatable gifts[100];
这样gifts将是一个inflatable数组,其中的每个元素都是inflatable对象,可以与成员运算符一起使用:
cin>>gifts[0].volume;
cout<<gifts[99].price<<endl;
注意:gifts是一个数组,不是结构!不是结构!不是结构!因此gifts.price是无效的。
要初始化结构数组,可以使用初始化数组的规则和初始化结构的规则。由于数组中的每个元素都是结构,因此可以使用结构初始化的方式来提供它的值。
inflatable guests[2]=
{{"Bambi",0.5,21.99};{"Godzilla",2000,565.99};
};
#include <iostream>
struct inflatable
{char name[20];float voulume;double price;
};
int main()
{using namespace std;inflatable guests[2] ={{"Bambi",0.5,21.99},{"Godzilla",2000,565.99}};cout << "The guests " << guests[0].name << " and " << guests[1].name<< "\nhave a combined volume of "<< guests[0].voulume + guests[1].voulume << " cubic feet." << endl;return 0;
}
9.1.6、结构中的为字段
C++允许指定占用特定位数的结构成员,这使得创建与某个硬件设备上的寄存器对应的数据结构非常方便。字段的类型应为整型或枚举,接下来是冒号,冒号后面是一个数字,它指定了使用的位数。每个成员都被称为位字段。下面是一个例子:
struct torgle_register
{unsigned int SN:4;unsigned int :4;bool goodIn:1;bool goodTorgle:1;
};
相关文章:
C++初学(9)
9.1、结构简介 虽然数组能够和存储多个元素,但所有元素必须相同,也就是说,同一个数组不能既存放int类型也存放float类型,而C的结构可以满足要求。结构是一种比数组更灵活的数据格式,因为同一个结构可以存储多种类型的…...
ardupilot开发 --- 网络技术综述 篇
不信人间有白头 一些概念参考文献 一些概念 以太网、局域网、互联网 以太网(Ethernet),是一种计算机局域网技术。以太网是一种有线网络技术,网络传输介质包括:以太网电缆,如常见的双绞线、光纤等。根据传输速度,可以氛…...
一文详解大模型蒸馏工具TextBrewer
原文:https://zhuanlan.zhihu.com/p/648674584 本文分享自华为云社区《TextBrewer:融合并改进了NLP和CV中的多种知识蒸馏技术、提供便捷快速的知识蒸馏框架、提升模型的推理速度,减少内存占用》,作者:汀丶。 TextBre…...
Go语言加Vue3零基础入门全栈班10 Go语言+gRPC用户微服务项目实战 2024年07月31日 课程笔记
概述 如果您没有Golang的基础,应该学习如下前置课程。 Golang零基础入门Golang面向对象编程Go Web 基础Go语言开发REST API接口_20240728Go语言操作MySQL开发用户管理系统API教程_20240729Redis零基础快速入门_20231227GoRedis开发用户管理系统API实战_20240730Mo…...
ChatGPT能代替网络作家吗?
最强AI视频生成:小说文案智能分镜智能识别角色和场景批量Ai绘图自动配音添加音乐一键合成视频百万播放量https://aitools.jurilu.com/ 当然可以!只要你玩写作AI玩得6,甚至可以达到某些大神的水平! 看看大神、小白、AI输出内容的区…...
Http自定义Header导致的跨域问题
最近写一个小项目,前后端分离,在调试过程中访问远程接口,出现了CORS问题,接口使用的laravel框架,于是添加了解决跨域的中间件,但是前端显示仍存在跨域问题,以为自己写的有问题,检查了…...
python 中 file.read(), file.readline()和file.readlines()区别和用法
python 中 file.read(), file.readline()和file.readlines()区别和用法 文章目录 python 中 file.read(), file.readline()和file.readlines()区别和用法1. file.read()2. file.readline()3. file.readlines()4. 总结5. 注意事项 file.read(), file.readline(), 和 file.readli…...
python 学习: np.pad
在NumPy中,np.pad函数用于对数组进行填充(padding),即在数组的边界处添加额外的值。这在图像处理、信号处理或任何需要扩展数据边界的场景中非常有用。 以下是np.pad函数的一些关键参数和使用示例: array:…...
等保2.0 | 人大金仓数据库测评
人大金仓数据库,全称为金仓数据库管理系统KingbaseES(简称:金仓数据库或KingbaseES),是北京人大金仓信息技术股份有限公司自主研制开发的具有自主知识产权的通用关系型数据库管理系统。以下是关于人大金仓数据库的详细…...
AIGC赋能智慧农业:用AI技术绘就作物生长新蓝图
( 于景鑫 国家农业信息化工程技术研究中心)随着人工智能技术的日新月异,AIGC(AI-Generated Content,AI生成内容)正在各行各业掀起一场革命性的浪潮。而在智慧农业领域,AIGC技术的应用也正迸发出耀眼的火花。特别是在作物生长管理方面,AIGC有望彻底改变传…...
yolov8蒸馏(附代码-免费)
首先蒸馏是什么? 模型蒸馏(Model Distillation)是一种用于在计算机视觉中提高模型性能和效率的技术。在模型蒸馏中,通常存在两个模型,即“教师模型”和“学生模型”。 为什么需要蒸馏? 在不增加模型计算…...
Flink-StarRocks详解:第五部分查询数据湖(第55天)
系列文章目录 4.查询数据湖 4.1 Catalog 4.1.1 概述 4.1.1.1 基本概念 4.1.1.2 Catalog 4.1.1.3 访问Catalog 4.1.2 Default catalog 4.1.3 External Catalog 4.2 文件外部表 4.2.1 使用限制 4.2.2 开源版本语法 4.2.3 阿里云版本 5. 查询及优化 文章目录 系列文章目录前言4.查…...
【MySQL】常用数据类型
目录 数据类型 数据类型分类 数值类型 tinyint类型 bit类型 小数类型 float decimal 字符串类型 char varchar 日期和时间类型 enum和set 数据类型 数据类型分类 数值类型 tinyint类型 tinyint类型只占用一个字节类似于编程语言中的字符char。有带符号和无符号两…...
创建第一个rust tauri项目
安装nodejs curl -sL https://deb.nodesource.com/setup_20.x | sudo bash node -vproxychains4 npm create tauri-applatest✔ Project name tauri-app ✔ Choose which language to use for your frontend TypeScript / JavaScript - (pnpm, yarn, npm, bun) ✔ Choose yo…...
【课程总结】day19(中):Transformer架构及注意力机制了解
前言 本章内容,我们将从注意力的基础概念入手,结合Transformer架构,由宏观理解其运行流程,然后逐步深入了解多头注意力、多头掩码注意力、融合注意力等概念及作用。 注意力机制(Attension) 背景 深度学…...
4.4 标准正交基和格拉姆-施密特正交化
本节的两个目标就是为什么和怎么做(why and how)。首先是知道为什么正交性很好:因为它们的点积为零; A T A A^TA ATA 是对角矩阵;在求 x ^ \boldsymbol{\hat x} x^ 和 p A x ^ \boldsymbol pA\boldsymbol{\hat x} pAx^ 时也会很简单。第二…...
spring事务的8种失效的场景,7种传播行为
Spring事务大部分都是通过AOP实现的,所以事务失效的场景大部分都是因为AOP失效,AOP基于动态代理实现的 1.方法没有被public修饰 原因:Spring会为方法创建代理、AOP添加事务通知前提条件是该方法时public的。 2.类没有被Spring容器所托管 …...
进程的虚拟内存地址(C++程序的内存分区)
严谨的说法: 一个C、C程序实际就是一个进程,那么C的内存分区,实际上就是一个进程的内存分区,这样的话就可以分为两个大模块,从上往下,也就是0地址一直往下,假如是x86的32位Linux系统,…...
英特尔移除超线程与AMD多线程性能对比
#### 英特尔Lunar Lake架构取消超线程 在英特尔宣布Lunar Lake架构时,一个令人惊讶的消息是下一代轻薄优化架构将移除Hyper-Threading(超线程,简称SMT)。而AMD最新的Zen 5/Zen5C多线程基准测试结果显示,该特性依然为A…...
定期自动巡检,及时发现机房运维管理中的潜在问题
随着信息化技术的迅猛发展,机房作为企业数据处理与存储的核心场所,其运维管理的复杂性和挑战性也与日俱增。为确保机房设备的稳定运行和业务的连续性,运维团队必须定期进行全面的巡检。然而,传统的手工巡检方式不仅效率低下&#…...
八股文(一)
1. 为什么不使用本地缓存,而使用Redis? Redis相比于本地缓存(如JVM中的缓存)有以下几个显著优势: 高性能与低延迟:Redis是一个基于内存的数据库,其读写性能非常高,通常可以达到几万…...
灵茶八题 - 子数组 ^w^
灵茶八题 - 子数组 w 题目描述 给你一个长为 n n n 的数组 a a a,输出它的所有连续子数组的异或和的异或和。 例如 a [ 1 , 3 ] a[1,3] a[1,3] 有三个连续子数组 [ 1 ] , [ 3 ] , [ 1 , 3 ] [1],[3],[1,3] [1],[3],[1,3],异或和分别为 1 , 3 , …...
git clone private repo
Create personal access token Clone repo $ git clone https://<user_name>:<personal_access_tokens>github.com/<user_name>/<repo_name>.git...
vue3+ts+pinia+vant-项目搭建
1.pnpm介绍 npm和pnpm都是JavaScript的包管理工具,用于自动化安装、配置、更新和卸载npm包依赖。 pnpm节省了大量的磁盘空间并提高了安装速度:使用一个内容寻址的文件存储方式,如果多个项目使用相同的包版本,pnpm会存储单个副本…...
自动化测试概念篇
目录 一、自动化 1.1 自动化概念 1.2 自动化分类 1.3 自动化测试金字塔 二、web自动化测试 2.1 驱动 2.2 安装驱动管理 三、selenium 3.1 ⼀个简单的web自动化示例 3.2 selenium驱动浏览器的工作原理 一、自动化 1.1 自动化概念 在生活中: 自动洒水机&am…...
Mojo值的生命周期(Life of a value)详解
到目前为止,我们已经解释了 Mojo 如何允许您使用 Mojo 的所有权模型构建内存安全的高性能代码而无需手动管理内存。但是,Mojo 是为 系统编程而设计的,这通常需要对自定义数据类型进行手动内存管理。因此,Mojo 允许您根据需要执行此操作。需要明确的是,Mojo 没有引用计数器…...
java对接kimi详细说明,附完整项目
需求: 使用java封装kimi接口为http接口,并把调用kimi时的传参和返回数据,保存到mysql数据库中 自己记录一下,以做备忘。 具体步骤如下: 1.申请apiKey 访问:Moonshot AI - 开放平台使用手机号手机号验证…...
鸿蒙媒体开发【基于AVCodec能力的视频编解码】音频和视频
基于AVCodec能力的视频编解码 介绍 本实例基于AVCodec能力,提供基于视频编解码的视频播放和录制的功能。 视频播放的主要流程是将视频文件通过解封装->解码->送显/播放。视频录制的主要流程是相机采集->编码->封装成mp4文件。 播放支持的原子能力规…...
django集成pytest进行自动化单元测试实战
文章目录 一、引入pytest相关的包二、配置pytest1、将django的配置区分测试环境、开发环境和生产环境2、配置pytest 三、编写测试用例1、业务测试2、接口测试 四、进行测试 在Django项目中集成Pytest进行单元测试可以提高测试的灵活性和效率,相比于Django自带的测试…...
48天笔试训练错题——day40
目录 选择题 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 编程题 1. 发邮件 2. 最长上升子序列 选择题 1. DNS 劫持又称域名劫持,是指在劫持的网络范围内拦截域名解析的请求,分析请求的域名,把审查范围以外的请求放行,否则返回…...
柳州做网站哪家好/谷歌seo课程
几次出现这个问题本人的解决 第一次:本人是下面两个都没有试,build的几次后它又自己恢复正常了 第二次:把iOS平台删了,然后更新了cordova和镜像(根据终端的提示),然后添加ios平台,…...
网站开发报价明细/信息流优化师没经验可以做吗
我要在线上数据库的一个表增加个字段,这个表非常小,就几K,但执行不了,一执行就卡死,锁掉。alter table tiv_product_detail_copy add activity_type varchar(40) NOT NULL COMMENT 活动类型 lbjp-结派 lc-活动 dbq-券礼…...
开网站做家政/公司网站免费自建
函数不正确说明这个盘的文件系统结构损坏了。在平时如果数据不重要,那么可以直接格式化就能用了。但是有的时候里面的数据很重要,那么就必须先恢复出数据再格式化。具体恢复方法可以看正文了解(不格式化的恢复方法) 工具/软件&…...
科学城做网站公司/郑州百度推广公司电话
解决在OFFICE平台传输数据慢的问题,使用GZIPJSON替代WEBSERVICE提供数据参考文章: (1)解决在OFFICE平台传输数据慢的问题,使用GZIPJSON替代WEBSERVICE提供数据 (2)https://www.cnblogs.com/li…...
wordpress商业授权价格/优化网站
在小学的初级阶段,一开始所学的除法是整除。当我们随着所学知识范围的扩大,会发现有些除法不能整除,也就出现了带余除法。有一类除法还更特殊,被除数比除数要小,商是0,后面要带个余数,比如370……...
杭州市临安区建设局网站/seo网站内容优化
之前在当地的一期技术沙龙做了一个《网络开发那些事》的技术分享,讲述了自己职业生涯从事的与网络相关的开发工作。在接触这类开发之前一直在从事业务系统或者单机系统的开发,说真的那时感觉自己对程序员这个职业既没有兴趣也没有多大能力,但…...