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, // 现在为 6
HIGH // 现在为 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,关注后即可获取最新文章推送
看完如果觉得有帮助,欢迎 点赞、收藏、关注
C 语言结构体和枚举完全指南:成员访问、字符串操作、枚举基础的更多相关文章
- 不可或缺 Windows Native (8) - C 语言: 结构体,共用体,枚举,类型定义符
[源码下载] 不可或缺 Windows Native (8) - C 语言: 结构体,共用体,枚举,类型定义符 作者:webabcd 介绍不可或缺 Windows Native 之 C 语言 结构体 ...
- C语言结构体对齐
1.结构体变量中的元素如何访问? (1)数组中元素的访问方式:表面上有2种方式(数组下标方式和指针方式):实质上都是指针方式访问.(2)结构体变量中的元素访问方式:只有一种,用.或者->的方式来 ...
- c语言结构体
[C语言]21-结构体 本文目录 一.什么是结构体 二.结构体的定义 三.结构体变量的定义 四.结构体的注意点 五.结构体的初始化 六.结构体的使用 七.结构体数组 八.结构体作为函数参数 九.指向结 ...
- 漫谈C语言结构体struct、公用体union空间占用
先用代码说话: #include<stdio.h> union union_data0{ int a ;//本身占用4个字节 char b ;//本身占用1个字节 int c ; }; u ...
- 浅谈c语言结构体
对于很多非计算机专业来说,c语言课程基本上指针都不怎么讲,更别说后面的结构体了.这造成很多学生对结构体的不熟悉.这里我就浅谈一下我对结构体的认识. 结构体,就是我们自己定义出一种新的类型,定义好之后, ...
- 解析C语言结构体对齐(内存对齐问题)
C语言结构体对齐也是老生常谈的话题了.基本上是面试题的必考题.内容虽然很基础,但一不小心就会弄错.写出一个struct,然后sizeof,你会不会经常对结果感到奇怪?sizeof的结果往往都比你声明的 ...
- iOS学习06C语言结构体
1.结构体的概述 在C语言中,结构体(struct)指的是一种数据结构,是C语言中构造类型的其中之一. 在实际应用中,我们通常需要由不同类型的数据来构成一个整体,比如学生这个整体可以由姓名.年龄.身高 ...
- C语言 结构体中的成员域偏移量
//C语言中结构体中的成员域偏移量 #define _CRT_SECURE_NO_WARNINGS #include<stdio.h> #include<stdlib.h> # ...
- C语言 结构体的内存对齐问题与位域
http://blog.csdn.net/xing_hao/article/details/6678048 一.内存对齐 许多计算机系统对基本类型数据在内存中存放的位置有限制,它们会要求这些数据的首地 ...
- c语言结构体在内存中存储,字节对齐
注意: 出于效率的考虑,C语言引入了字节对齐机制,一般来说,不同的编译器字节对齐机制有所不同,但还是有以下3条通用准则: (1)结构体变量的大小能够被其最宽基本类型成员的大小所整除: (2)结构体每个 ...
随机推荐
- Gitlab 16.9.0 用Access Token注册Gitlab Runner
升级到当前最新版Gitlab之后 在"管理中心"的"CI/CD"--"Runners"下,提示以前的那种注册令牌的方式已经过时了. 点击右上 ...
- 【Azure 微服务】Service fabric升级结构版本失败问题
问题描述 Service fabric升级结构版本失败,Service Fabric的可靠性层是白银层,持久性层为青铜层,当把节点从6个直接在虚拟规模集(VMSS)中缩放成了3个.从而引起了Servi ...
- Java 练习题(类+调用方法)
1 /* 2 * 3 * 定义一个 PassObject,在类中定义一个方法printAress(),该方法的定义如下: 4 * public void printAreas(Circle c,int ...
- 我见过最好的.NET/C#图片工具(裁剪、缩放、与加水印)
付费才能得到的好资源,限今天"免费"领取,月薪超30k必备技能! 资源1:高薪热门[WPF上位机+工业互联网]从零手写实战回复wpf免费领取 资源2:C#+Halcon机器视觉零基 ...
- springboot,简要记录,方便复习,
boot 笔记第一步新建工程,导包,由于boot的数据库框架是用mybtis -paus,所以关于数据库系统那儿不用色选mybatis ,需要重新maven导包完整导包以下人容: <?xml v ...
- K8S通过Yaml部署Nacos,注册服务报错503
报错信息: ErrCode:503, ErrMsg:server is DOWN now .detailed error message: Optional[Distro protocol XXXX] ...
- 自我总结的git的使用
git是什么 git是一个分布式版本控制工具,github是代码托管平台. git有什么用 保存文件的所有修改记录 使用版本号进行区分 随时可浏览历史版本记录 可还原到历史指定版本 对比不同版本的文件 ...
- 逆向通达信Level-2 续八 (BackTrace, Trace任意TdxW.exe内部函数, Breakin)
TdxW kun anti-debugging, i debug you without a debugger. 添加bt命令,BackTrace 下图是hack某一个函数后使用bt命令进行Trace ...
- Kafka之Producer网络传输
一.背景 在Kafka的组成部分(Broker.Consumer.Producer)中,设计理念迥异,每个部分都有自己独特的思考.而把这些部分有机地组织起来,使其成为一个整体的便是「网络传输」.区别于 ...
- 李沐动手学深度学习pytorch实践笔记
1.pytorch中的矩阵乘法: 2.标量对向量求导: 3.pytorch的backward函数: 4.如何直观理解梯度下降: 梯度,是个向量,有方向和长度就是向量,向量里的各个元素是偏导.是标量对向 ...