C++之结构、枚举

news2025/7/26 19:20:13

结构

C++提供了struct关键字可以将不同类型封装在一起,形成结构体.
数组中存储的是相同类型的数据,而结构中可以存储不同类型的数据。定义结构就像定义一个新的数据类型一样.

结构是类的基石

结构的定义、声明与初始化

定义语法格式:

struct 结构体类型名
{
成员列表;
};//此处有分号

1.仅仅是定义的话,系统不会为结构体类型开辟空间.系统会为结构体类型的变量开辟空间.
2.结构体中的成员有各自独立的空间.
3.定义结构体时,不要给成员初始化值(嵌入式设备对新特性兼容不是很好).只有最新的c++11可以,这相当于给实例默认值.

代码

#include <iostream>
using namespace std;

//1.定义结构
struct person
{
	char name[10];
	int age;
};

//2.定义结构的同时创建结构变量
struct animal
{
	char name[10];
	int weight;
} bird, dog;

//3.定义结构同时创建结构变量并初始化
struct drink
{
	char name[10];
} milk =
	{
		"伊利"};

//4.定义没有名称的结构
struct
{
	int x;
	int y;
	/* data */
} position; //除了定义时创建结构变量,后面无法创建结构变量了,因为该结构没有名称

int main()
{
	struct person sam;
	person amy; //声明结构变量时可以省略struct

	//声明结构变量并初始化
	person andy =
		{
			"andy",
			18};

	//初始化的值可以写在一行
	person sara = {"sara", 19};

	//初始化并省略等号
	person summer{"summer", 20};

	//大括号为空则默认初始化各项为零
	person jerry{};

	//两个同类型结构间可以赋值
	jerry = summer;

	cout << summer.name << endl
		 << summer.age << endl;
	return 0;
}

解析:

  • 结构体变量如果不初始化则其成员的值随机/不确定
  • 结构体变量初始化时必须按照成员的顺序及数据类型初始化

清空结构体

函数原型

void * memset(void *_Dst,int _Val,size_t _Size)
//作用:将_Dst地址开始的_Size字节值都设置为_Val
#include <iostream>
#include <string.h>
using namespace std;

struct person
{
	int age;
	char name[32];
};

int main(int argc, char *argv[])
{
	person Amy{13,"amy"};
	cout<<Amy.name<<endl;
	memset(&Amy,0,sizeof(Amy));//参数:(地址,字节设置为0,结构体大小)
	cout<<Amy.age<<endl;
    return 0;
}

运行结果
在这里插入图片描述

键盘给结构体中的成员赋值

#include <iostream>
#include <string.h>
using namespace std;

struct person
{
	int age;
	char name[32];
};

int main(int argc, char *argv[])
{
	person Amy;
	memset(&Amy,0,sizeof(Amy));
	cout<<"请输入年龄、姓名"<<endl;
	cin>>Amy.age>>Amy.name;
	cout<<Amy.age<<" "<<Amy.name<<endl;
    return 0;
}

运行结果
在这里插入图片描述

结构数组

可以创建每个元素都是结构的数组

#include <iostream>
using namespace std;

//定义结构
struct person
{
	char name[10];
	int age;
};

int main()
{
	person teacher[10];
	person student[100] =
		{
			{"Sam", 18}, {"Amy", 19}, {"Alon", 20}};

	cout << student[0].name << endl;
	return 0;
};

结构中的位字段

共用体

结构体:所有成员具有独立的空间
共用体:多个成员共享同一份空间
共用体空间的大小由占用空间最大的成员类型决定

#include <iostream>
using namespace std;

int main()
{
	union Data
	{
		short a;
		char b;
		int c;
	};
	Data da;
	da.a = 10;
	da.b = 20;
	da.c = 30;
	cout << da.a + da.b + da.c << endl;
	return 0;
};

运行结果
在这里插入图片描述
解析:
由于最后一次赋值为30,因此这片空间内存储的值为30,abc共用30.

共用体常用于节省内存.当前的计算机内存可能多大数GB,甚至是TB,似乎没有必要节省内存.对于一些嵌入式小型设备比如烤箱、MP3播放器等设备来说,内存很宝贵.
另外,共用体常用于操作系统数据结构或硬件数据结构.

枚举

批量声明多个常量,声明的枚举类型变量只能赋指定列表里的值.

#include <iostream>
using namespace std;

enum POKER_COLOR
{
	HONGTAO,
	MEIHUA,
	FANGKUAI,
	HEITAO
};//枚举值自动从0 1 2 3的顺序往后延续
int main()
{
	POKER_COLOR PC = HONGTAO;

	cout << PC << endl;
	cout << HONGTAO << " " << MEIHUA << " " << FANGKUAI << " " << HEITAO << endl;
	return 0;
};

运行结果
在这里插入图片描述


更改枚举默认值

#include <iostream>
using namespace std;

enum POKER_COLOR
{
	HONGTAO,
	MEIHUA = 10,//等号的意思为关联MEIHUA和10,并非赋值
	FANGKUAI,
	HEITAO
}; //枚举值自动从0 1 2 3的顺序往后延续
int main()
{
	POKER_COLOR PC = HONGTAO;

	cout << PC << endl;
	cout << HONGTAO << " " << MEIHUA << " " << FANGKUAI << " " << HEITAO << endl;
	return 0;
};

运行结果
在这里插入图片描述
解析:
更改默认枚举值后,该枚举值后续将从更改处延续

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

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

相关文章

深入浅出PyTorch——PyTorch生态简介+模型部署

1. 生态简介 介绍PyTorch生态在图像、视频、文本等领域中的发展&#xff0c;针对某个领域选择其中有代表性的一个工具包进行详细介绍 1.1 torchvision torchvision包含了在计算机视觉中常常用到的数据集&#xff0c;模型和图像处理的方式 函数作用 torchvision.datasets * 计…

PLC中ST编程的无符号数逻辑运算

AND与运算&#xff0c;两个数据每个位进行与运算&#xff0c;只有当相同位的值都为1时&#xff0c;那个位结果为1&#xff1b; 2# 0000 0100 1101 0010 2# 0001 0110 0010 1110 AND 2# 0000 0100 0000 0010 OR或运算&#xff0c;两个数据每个位进行或运算&#xff0c;只…

国产化Kettle、JDK、MySQL下载安装操作步骤

一、Kettle下载安装 &#xff08;一&#xff09;、kettle的下载 1、登录https://sourceforge.net/projects/pentaho/ 2、点击“Files”&#xff0c;进入Home / Data Integration 目录&#xff0c;下载需要的版本&#xff0c;以6.1为例。 3、点击“pdi-ce-6.1.0.1-196.zip”…

自制操作系统日记(8):变量显示

代码仓库地址&#xff1a;https://github.com/freedom-xiao007/operating-system 简介 上篇中&#xff0c;我们显示了静态的字符串在桌面上&#xff0c;本篇进一步探索&#xff0c;能将定义的整型变量的值显示在桌面上 探索历程说明 本来想着应该是一两天能搞定的&#xff…

基于智能算法的无人机路径规划研究(Matlab代码实现)

&#x1f468;‍&#x1f393;个人主页&#xff1a;研学社的博客 &#x1f4a5;&#x1f4a5;&#x1f49e;&#x1f49e;欢迎来到本博客❤️❤️&#x1f4a5;&#x1f4a5; &#x1f3c6;博主优势&#xff1a;&#x1f31e;&#x1f31e;&#x1f31e;博客内容尽量做到思维缜…

Docker学习(4)—— 容器数据卷

数据卷是为了实现数据的持久化&#xff0c;完全独立于容器的生存周期&#xff0c;因此Docker不会在删除容器时删除其挂载的数据卷。 通过下述方式运行一个容器&#xff0c;会自动将docker容器内的数据保存进宿主机的磁盘中 docker run -it --privilegedtrue -v /宿主机绝对路…

都说自动化测试才是测试人员的新出路,为什么要做自动化测试?

一、自动化测试 自动化测试是把以人为驱动的测试行为转化为机器执行的一种过程。    个人认为&#xff0c;只要能服务于测试工作&#xff0c;能够帮助我们提升工作效率的&#xff0c;不管是所谓的自动化工具&#xff0c;还是简单的SQL 脚本、批处理脚本&#xff0c;还是自己…

如何使用轻量应用服务器搭建NextCloud私有云网盘?

之前有介绍过使用可道云搭建个人云网盘系统&#xff1a;&#xff0c;这个教程我将介绍使用Nextcloud搭建个人云网盘&#xff0c;搭建的过程很相似&#xff0c;都采用的是宝塔面板作为辅助&#xff0c;可道云搭建使用的是一件部署&#xff0c;这个则需要使用上传解压文件的形式部…

专用短程通讯(DSRC)技术介绍

一、DSRC系统的概述 DSRC 通信协议是 ITS 标准体系框架中的重要组成部分&#xff0c;是整个智能交通服务系统的基础。DSRC 系统是一种无线移动通信系统&#xff0c;它通过数据的双向传输将车辆和道路有机的结合起来&#xff0c;利用计算机网络&#xff0c;在智能交通系统中提供…

中小团队要怎样搭建架构?腾讯大佬来教你,直接跟着大佬吃经验!

前言 在这个瞬息万变的时代&#xff0c;一个合适的团队架构对于企业发展至关重要。面对时代风向&#xff0c;腾讯等互联网巨头逐步开始了它们的变革&#xff1b;那么中小团队要如何搭建自己的团队架构呢&#xff1f; 今天给大家分享一份被称之“成为高级架构师捷径”的实用技…

【OpenGL开发】VS2017+nuget配置OpenGL开发环境(C++)

文章目录1、简介1.1 先决条件1.2 查找并安装包1.3 卸载软件包1.4 更新包1.5 管理解决方案的包1.6 “合并”选项卡2、nuget配置程序源2.1 在线源2.2 本地源3、nuget安装nupengl4、代码测试4.1 测试代码&#xff1a;freeglut4.2 测试代码&#xff1a;freegluttea4.3 测试代码&…

简单实现Springcloud跨项目相互调用

目录 一、前置准备 二、项目准备 三、实现跨项目调用 一、前置准备 我们本次是使用的电商项目中的商品、订单、用户为案例进行讲解。 技术选型 maven&#xff1a;3.5.4 数据库&#xff1a;MySQL 5.7 持久层: SpingData Jpa/Mybatis-plus 其他: SpringCloud Alibaba 技术栈 …

浅谈智能化能源管理系统平台在企业中的应用

安科瑞 时丽花 摘要&#xff1a;对焦化企业的智能化能源管理系统应用进行了较全面的分析&#xff0c;在企业节能减排、提升经济效益、优化生产组织等方面具有较高的应用价值&#xff0c;智能化能源管理系统在企业转型升级改造中具有广阔的前景。 关键词&#xff1a;智能化&am…

少样本苹果分类机器深度学习

场景&#xff1a; 样本少&#xff0c;且只有部分进行了标注。负样本类别&#xff08;不是被标注的那些&#xff09;不可穷尽&#xff0c;图像处理 步骤&#xff1a; 1&#xff0c;数据增强,扩充确认为普通苹果的样本数量 2&#xff0c;特征提取,使用VGG16模型提取图像特征 3…

国内优秀的多用户商城系统盘点(2022年整理)

电商战略时代&#xff0c;越来越多的企业或商家选择将消费者引入自己建设的独立商城&#xff0c;如零食行业的良品铺子、三只松鼠&#xff0c;从而打造属于自己的IP形象。此时&#xff0c;挑选一款优秀的商城源码是企业的不二之选&#xff0c;既降低了电商从业者和创业者的入门…

Dubbo

致力于提供高性能和透明化的RPC远程服务调用方案&#xff0c;以及SOA服务治理方案 使用zookeeper作为注册中心registry dubbo.config.annotation下相关注解 Service&#xff1a;被该注解修饰的类&#xff0c;会对外发布&#xff0c;包括IP、端口、路径到注册中心Reference&am…

深度学习之路=====10=====>>Resnext(tensorflow2)

简介 类型&#xff1a;2017CVPR 作者&#xff1a; Kaiming He组 和其他轻量级网络特点一样&#xff0c;Resnext也是通过降低参数量来改进模型&#xff0c;提高模型精度的。该模型基于Inception的split-transform-merge范式和VGG堆叠网络&#xff0c;将Resnet的单路卷积变成多…

程序员注意!35岁前,别靠死工资过日子

《2022程序员职场洞察报告》显示&#xff0c;六成受访者的职级和薪酬原地踏步&#xff0c;仅38.3%程序员群体的工作发生过变动&#xff0c;升职加薪、搞副业、自由工作等。 近两年&#xff0c;伴随疫情及行业发展的不确定性&#xff0c;企业招聘以及人才求职双方都变得谨慎。越…

MFC程序设计——用button更改静态文本+显示内容并弹出新内容+静态文本动态打开位图

目录 一、新建基于对话框的MFC编程项目 二、设计界面 2.设置启动项 2.找到资源视图和Dialog 3.拖入控件 三、创建变量&#xff08;关联对话框与静态文本&#xff09; 四、写入控件代码 1.在文本上的应用 2.在图像上的应用 2.1初始化的方法 2.2控件导入的方法 3.控件…

TSC TTP244Pro 打码机出现的问题及解决方案

背景&#xff1a; 最近在使用TSC的TTP 244 Pro 打码机的过程中&#xff0c;出现了几个小问题&#xff0c;最后请教了专业的人员才解决了问题&#xff0c;现把需要注意的点记录如下&#xff1a; 准备&#xff1a; 先去TSC的** 官网 **上找关于适用于你的打码机和使用环境的驱…