当前位置: 首页 > ai >正文

嵌入式学习笔记C语言阶段--17共用体和枚举

枚举(Enumeration)

概念

枚举是 C 语言中的一种用户自定义数据类型,它用于定义一组命名的整数常量。枚举类型可以提高代码的可读性和可维护性,因为使用有意义的名称来代替数字,使代码更易于理解。

案例

以下是一个简单的枚举示例,用于表示一周的七天:

#include <stdio.h>
​
// 定义枚举类型 Weekday
enum Weekday {MONDAY,TUESDAY,WEDNESDAY,THURSDAY,FRIDAY,SATURDAY,SUNDAY
};
​
// 函数用于打印对应星期几的信息
void printWeekday(enum Weekday day) {switch (day) {case MONDAY:printf("Today is Monday.\n");break;case TUESDAY:printf("Today is Tuesday.\n");break;case WEDNESDAY:printf("Today is Wednesday.\n");break;case THURSDAY:printf("Today is Thursday.\n");break;case FRIDAY:printf("Today is Friday.\n");break;case SATURDAY:printf("Today is Saturday.\n");break;case SUNDAY:printf("Today is Sunday.\n");break;default:printf("Invalid day.\n");}
}
​
int main() {// 声明一个枚举类型的变量并初始化为 WEDNESDAYenum Weekday today = WEDNESDAY;// 调用函数打印信息printWeekday(today);
​return 0;
}
代码解释
  1. 枚举类型定义enum Weekday 定义了一个名为 Weekday 的枚举类型,包含了一周七天的名称。默认情况下,MONDAY 的值为 0,TUESDAY 的值为 1,依此类推。

  2. 函数 printWeekday:该函数接受一个 enum Weekday 类型的参数,并根据传入的值使用 switch 语句打印相应的信息。

  3. main 函数:声明一个 enum Weekday 类型的变量 today 并初始化为 WEDNESDAY,然后调用 printWeekday 函数打印信息。

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
​
/*
枚举类型1. 枚举类型每一个元素在没有给予默认值的情况下,第一个元素对应的数值为 0,之后的元素逐个递增2. 枚举中的元素可以指定数据,之后的数据在没有赋予明确的数值下,对应的数据从当前指定数据之后递增3. 枚举中的每一个元素都可以单独赋值
*/
enum Week
{SUN,MON,TUS = 5,WEN,THU,FRI,SAT
};
​
/*
演示案例!不正确,可以利用 十六进制控制二进制数据内容进行调节
利用一个字节数据改变硬件状态。
*/
enum STM_GPIO
{GPIO_1 = 0x1,GPIO_2 = 0x2,GPIO_3 = 0x4,GPIO_4 = 0x8,GPIO_5 = 0x10,GPIO_6 = 0x20
};
​
int main(int argc, char const *argv[])
{printf("SUN : %d\n", SUN);printf("SUN : %d\n", MON);printf("SUN : %d\n", TUS);printf("SUN : %d\n", WEN);printf("SUN : %d\n", THU);printf("SUN : %d\n", FRI);printf("SUN : %d\n", SAT);
​return 0;
}

共用体(Union)

概念

共用体也是一种用户自定义数据类型,它允许在相同的内存位置存储不同的数据类型。共用体的所有成员共享同一块内存空间,因此在同一时间只能使用一个成员。

案例

以下是一个简单的共用体示例,用于存储不同类型的数据:

#include <stdio.h>
​
// 定义共用体类型 Data
union Data {int i;float f;char str[20];
};
​
int main() {// 声明一个共用体类型的变量 dataunion Data data;
​// 存储整数data.i = 10;printf("data.i: %d\n", data.i);
​// 存储浮点数data.f = 220.5;printf("data.f: %.2f\n", data.f);
​// 存储字符串snprintf(data.str, sizeof(data.str), "Hello");printf("data.str: %s\n", data.str);
​return 0;
}
代码解释
  1. 共用体类型定义union Data 定义了一个名为 Data 的共用体类型,包含一个整数 i、一个浮点数 f 和一个字符数组 str

  2. main 函数:声明一个 union Data 类型的变量 data,然后分别存储整数、浮点数和字符串,并打印出相应的值。需要注意的是,每次存储新的数据时,会覆盖之前存储的数据。

#include <stdio.h>
​
/*
共用体1. 共用体占用内存空间大小取决于整个共用体中的占用内存最大数据类型2. 共用体空间使用需要主要内存清理问题3. 注意共用体内存数据问题
*/
// 定义共用体类型 Data
union Data {int int_arr[10]; // 40double double_arr[10]; // 80char str[40];    // 40
};
​
int main(int argc, char const *argv[])
{printf("sizeof(Data) : %ld\n", sizeof(union Data));
​union Data data;
​/*每一次使用共用体,有且只允许使用共用体的一个元素内容*/data.int_arr[5] = 65;printf("data.int_arr[0] = %d\n", data.int_arr[0]);printf("data.int_arr[1] = %d\n", data.int_arr[1]);printf("data.int_arr[2] = %d\n", data.int_arr[2]);printf("data.int_arr[3] = %d\n", data.int_arr[3]);printf("data.int_arr[4] = %d\n", data.int_arr[4]);printf("data.int_arr[5] = %d\n", data.int_arr[5]);printf("data.int_arr[6] = %d\n", data.int_arr[6]);
​printf("&data : %p\n", &data);printf("&data.int_arr[5] : %p\n", &data.int_arr[5]);
​printf("data.str[20] : %c\n", data.str[20]); // 'A'return 0;
}

http://www.xdnf.cn/news/14443.html

相关文章:

  • LG P4278 带插入区间K小值 Solution
  • SCADA|KingSCADA通过组合框选择修改变量的值
  • JS进阶 Day04
  • 2GT 环形闭口闭环同步带一种具有特定齿形和结构的传动带
  • MotleyCrew ——抛弃dify、coze,手动搭建多agent工作流
  • Cangejie Magic智谱AI文生图API实战详解
  • 洛谷 排队接水 贪心
  • 2025CVPR最佳论文系列
  • AI 产品设计头脑风暴
  • Leetcode 3583. Count Special Triplets
  • 【python深度学习】Day 54 Inception网络及其思考
  • 深入理解IOC与DI
  • PID 控制算法 | 参数整定 | 方法 / 仿真 / 应用案例
  • 图片压缩工具 | 按指定高度垂直切割图片
  • 归一化:深度学习的隐藏加速器,解密数据标准化的魔力
  • Spring 事务传播行为全景分析表
  • Java设计模式之创建型模式( 工厂方法模式)介绍与说明
  • 智能跃迁:企业大模型落地方法论与路径最佳实践
  • 逆向知识点
  • 5.5.2_2并查集的进一步优化
  • 运算符与优先级
  • Docker环境下的EFK日志分析实践:从Filebeat采集到Kibana可视化的完整部署指南
  • 【LeetCode 207】课程表(有向无环图 DAG、拓扑排序)
  • 在C++中进程间通信(IPC)
  • 数据库学习(七)——MySQL执行引擎
  • Google机器学习实践指南(非线性特征工程解析)
  • 人工智能学习37-Keras手写识别预测
  • 对于数据库触发器自动执行的理解
  • Java类的继承
  • Luckfox Pico Pi RV1106学习<3>:支持IMX415摄像头