C 语言结构体和枚举完全指南:成员访问、字符串操作、枚举基础

访问结构体成员

要访问结构体的成员,请使用点语法 (.):

// 创建名为 myStructure 的结构体
struct MyStructure {int myNum;char myLetter;
};int main() {// 创建名为 s1 的 myStructure 的结构体变量struct MyStructure s1;// 为 s1 的成员分配值s1.myNum = 13;s1.myLetter = 'B';// 打印值printf("My number: %d\n", s1.myNum);printf("My letter: %c\n", s1.myLetter);return 0;
}

现在您可以使用只使用一个结构体,轻松创建多个具有不同值的结构体变量:

// 创建不同的结构体变量
struct MyStructure s1;
struct MyStructure s2;// 为不同的结构体变量分配值
s1.myNum = 13;
s1.myLetter = 'B';s2.myNum = 20;
s2.myLetter = 'C';

如何在结构体中使用字符串?

请记住,C 语言中的字符串实际上是字符数组,不幸的是,您无法像这样为数组分配值:

struct MyStructure {int myNum;char myLetter;char myString[30]; // 字符串
};int main() {struct MyStructure s1;// 尝试为字符串分配值s1.myString = "Some text";// 尝试打印值printf("My string: %s", s1.myString);return 0;
}

会发生错误:

prog.c:12:15: error: assignment to expression with array type

但是,有一个解决办法!您可以使用 strcpy() 函数并将值分配给 s1.myString,如下所示:

struct MyStructure {int myNum;char myLetter;char myString[30]; // 字符串
};int main() {struct MyStructure s1;// 使用 strcpy 函数为字符串分配值strcpy(s1.myString, "Some text");// 打印值printf("My string: %s", s1.myString);return 0;
}

结果:

My string: Some text

更简单的语法

您也可以在声明时为结构体变量的成员分配值,只需一行。

只需在花括号 {} 内插入一个以逗号分隔的列表中的值。请注意,您不必使用 strcpy() 函数来为字符串值使用此技术:

// 创建结构体
struct MyStructure {int myNum;char myLetter;char myString[30];
};int main() {// 创建一个结构体变量并为其分配值struct MyStructure s1 = {13, 'B', "Some text"};// 打印值printf("%d %c %s", s1.myNum, s1.myLetter, s1.myString);return 0;
}

注意:插入的值的顺序必须与结构体中声明的变量类型的顺序一致(对于 int 为 13,对于 char 为 ‘B’,等等)。

C 语言中的枚举 (enum)

枚举 (enum) 是一种特殊类型,用于表示一组常量(不可更改的值)。

要创建枚举,请使用 enum 关键字,后跟枚举的名称,并用逗号分隔枚举项:

enum Level {LOW,MEDIUM,HIGH
};

注意,最后一个项目不需要逗号。

使用大写字母不是必需的,但通常被认为是良好的实践。

Enum 是“enumerations”的缩写,意为“特别列出”。

要访问枚举,您必须创建一个变量。

在 main() 方法中,指定 enum 关键字,后跟枚举的名称 (Level) 和枚举变量的名称 (myVar):

enum Level myVar;

现在您已创建了一个枚举变量 (myVar),可以为其分配一个值。

分配的值必须是枚举中的项目之一 (LOW、MEDIUM 或 HIGH):

enum Level myVar = MEDIUM;

默认情况下,第一个项目 (LOW) 的值为 0,第二个 (MEDIUM) 的值为 1,依此类推。

如果现在尝试打印 myVar,它将输出 1,表示 MEDIUM:

int main() {// 创建一个枚举变量并为其分配一个值enum Level myVar = MEDIUM;// 打印枚举变量printf("%d", myVar);return 0;
}

更改值

如您所知,枚举的第一个项目的值为 0。 第二个值为 1,依此类推。

为了使值更易于理解,您可以轻松地更改它们:

enum Level {LOW = 25,MEDIUM = 50,HIGH = 75
};
printf("%d", myVar); // 现在输出 50

请注意,如果您为一个特定项目分配值,则下一个项目将相应地更新其编号:

enum Level {LOW = 5,MEDIUM, // 现在为 6HIGH // 现在为 7
};

枚举在 switch 语句中

枚举通常在 switch 语句中使用,以检查相应的值:

enum Level {LOW = 1,MEDIUM,HIGH
};int main() {enum Level myVar = MEDIUM;switch (myVar) {case 1:printf("Low Level");break;case 2:printf("Medium level");break;case 3:printf("High level");break;}return 0;
}

为什么和何时使用枚举?

枚举用于为常量命名,这使代码更易于阅读和维护。

当您拥有不会改变的值时,例如月天、日、颜色、纸牌等等,请使用枚举。

最后

为了方便其他设备和平台的小伙伴观看往期文章:

微信公众号搜索:Let us Coding,关注后即可获取最新文章推送

看完如果觉得有帮助,欢迎 点赞、收藏、关注

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

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

相关文章

Miniconda Python解释器 Conda 包管理器 Pytorch

Miniconda Miniconda 是一个轻量级的 Anaconda 版本,它是一个用于管理 Python 环境和包的开源工具。Anaconda 是一个数据科学和机器学习的开发环境,它包含了许多常用的 Python 包和工具。 与 Anaconda 相比,Miniconda 的安装包更小&#xf…

VBA中类的解读及应用第八讲:实现定时器功能的自定义类事件

《VBA中类的解读及应用》教程【10165646】是我推出的第五套教程,目前已经是第一版修订了。这套教程定位于最高级,是学完初级,中级后的教程。 类,是非常抽象的,更具研究的价值。随着我们学习、应用VBA的深入&#xff0…

Java中输入和输出处理(三)二进制篇

叮咚!加油!马上学完 读写二进制文件Data DataInputStream类 FilFeInputStream的子类 与FileInputStream类结合使用读取二进制文件 DataOutputStream类 FileOutputStream的子类 与FileOutputStream类结合使用写二进制文件 读写二进制代码 package 面…

vue实现-年、月、日、时、分、秒、星期?

一、文章引导 #mermaid-svg-nP4oT3Y4d6oaxUsg {font-family:"trebuchet ms",verdana,arial,sans-serif;font-size:16px;fill:#333;}#mermaid-svg-nP4oT3Y4d6oaxUsg .error-icon{fill:#552222;}#mermaid-svg-nP4oT3Y4d6oaxUsg .error-text{fill:#552222;stroke:#55222…

Pangolin编译

文章目录 版本编译错误 版本 ubuntu 22 编译 # 复制选择版本(ORB SLAM 需要的版本为0.6) git clone https://github.com/stevenlovegrove/Pangolin.git cd Pangolin/ git checkout v0.6# 编译 mkdir build && cd build cmake .. -DCMAKE_INS…

倍福(Bechhoff) CX8090嵌入式PC控制器开发没有想像中的那么难

笔者曾2023年初曾为云南阜外医院新风系统开发自动控制系统。医院所有新风设备和公区照明全部采用倍福嵌入式PC控制器实现智能控制。其中新风和供水计量通过CX8090实现控制;公区照明通过BC9050实现控制;并采用美国邦纳人机界面(THM035B)实现远…

树形结构的窗口小部件

这段代码是一个使用Qt框架的C程序,实现了一个树形结构的窗口小部件(TreeWidget)。以下是主要的解释: #include "treewidget.h" #include "ui_treewidget.h"TreeWidget::TreeWidget(QWidget *parent) : QWidg…

DB2除法的小数位问题(四舍五入问题)以及其他常用的函数

DB2除法的小数位问题(四舍五入问题)以及其他常用的函数 1. DB2取第一条数据2. DB2 中指定值排序2.1 使用case when2.2 使用decode函数 3. 拼接函数4. 强制转换类型——cast函数5. DB2除法的小数位问题(四舍五入问题)5.1 关于round…

栈和排序.

给你一个1->n的排列和一个栈,入栈顺序给定 你要在不打乱入栈顺序的情况下,对数组进行从大到小排序 当无法完全排序时,请输出字典序最大的出栈序列 输入 第一行一个数n 第二行n个数,表示入栈的顺序,用空格隔开&…

three.js 关键帧动画

效果&#xff1a; 代码&#xff1a; <template><div><el-container><el-main><div class"box-card-left"><div id"threejs" style"border: 1px solid red"></div><div class"box-right"…

用汇编编写加解密函数

1.data段 data db "hello,sam" key db "key" dataLen dword ? endata byte 10 dup(0) dedata byte 10 dup(0) 2.Encryption&#xff08;加密&#xff09; Encryption procpush ebpmov ebp,esp;加密数据长度,循环次数mov ecx,sizeof data;寄存器不够用…

金和OA jc6 GetAttOut SQL注入漏洞复现

0x01 产品简介 金和OA协同办公管理系统软件(简称金和OA),本着简单、适用、高效的原则,贴合企事业单位的实际需求,实行通用化、标准化、智能化、人性化的产品设计,充分体现企事业单位规范管理、提高办公效率的核心思想,为用户提供一整套标准的办公自动化解决方案,以帮助…

方法 ‘NetWork.call()‘ 的签名与类 ‘Model‘ 中基方法的签名不匹配

方法 ‘NetWork.call()’ 的签名与类 ‘Model’ 中基方法的签名不匹配 这个错误通常出现在 TensorFlow 的 Keras 模型中&#xff0c;表示子类化的模型&#xff08;比如你的 NetWork 类&#xff09;在实现 call 方法时与基类 Model 中定义的 call 方法的签名不匹配。 在这里&am…

语义解析:如何基于SQL去实现自然语言与机器智能连接的桥梁

&#x1f308;个人主页: Aileen_0v0 &#x1f525;热门专栏: 华为鸿蒙系统学习|计算机网络|数据结构与算法 &#x1f4ab;个人格言:"没有罗马,那就自己创造罗马~" 目录 语义解析 定义 作用 语义解析的应用场景 场景一&#xff1a; 场景二&#xff1a; 总结语…

【LeetCode】winter vacation training

欢迎来到Cefler的博客&#x1f601; &#x1f54c;博客主页&#xff1a;那个传说中的man的主页 &#x1f3e0;个人专栏&#xff1a;题目解析 &#x1f30e;推荐文章&#xff1a;【LeetCode】winter vacation training 目录 &#x1f449;&#x1f3fb; 有效的字母异位词&#x…

129基于matlab的粒子群算法、遗传算法、鲸鱼算法、改进鲸鱼算法优化最小二乘支持向量机(lssvm)的gam正则化参数和sig2RBF函数的参数

基于matlab的粒子群算法、遗传算法、鲸鱼算法、改进鲸鱼算法优化最小二乘支持向量机&#xff08;lssvm&#xff09;的gam正则化参数和sig2RBF函数的参数。输出适应度曲线&#xff0c;测试机和训练集准确率。程序已调通&#xff0c;可直接运行。 129 matlabLSSVM优化算法 (xiaoh…

什么是k8s和声明式编程?

认识k8s之后&#xff0c;他的操作模式对我来说是一种很不错的体验。他提供了更接近现实世界的面向对象接口。 什么是k8s&#xff1f; Kubernetes&#xff08;K8s&#xff09;是一种开源容器编排平台&#xff0c;用于自动化部署、扩展和管理容器化应用程序。它简化了容器化应用…

【计算机图形学】作业:Bresenham 法绘制圆

题目&#xff1a; 请采用 Bresenham 法绘制圆&#xff08;共 30 分&#xff09;。要求&#xff1a; &#xff08;1&#xff09; 给出算法的文字描述&#xff08;共 15 分&#xff09;。 &#xff08;2&#xff09; 编写函数&#xff0c;在给定圆心坐标和半径的情况下&#xff…

【排序】对各种排序的总结

文章目录 前言1. 排序算法的复杂度及稳定性分析2. 排序算法的性能测试2.1 重复率较低的随机值排序测试2.2 重复率较高的随机值排序测试 前言 本篇是基于我这几篇博客做的一个总结&#xff1a; 《简单排序》&#xff08;含&#xff1a;冒泡排序&#xff0c;直接插入排序&#x…

RabbitMQ(六)消息的持久化

目录 一、简介1.1 定义1.2 消息丢失的场景 二、交换机的持久化方式一&#xff1a;直接 new方式二&#xff1a;channel.exchangeDeclare()方式三&#xff1a;ExchangeBuilder【推荐】 三、队列的持久化方式一&#xff1a;直接 new方式二&#xff1a;channel.queueDeclare()方式三…