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

嵌入式学习笔记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;
}

相关文章:

  • 生成对抗网络(GANs)入门介绍指南:让AI学会“创造“的魔法(一)
  • CMake实战:qmake转cmake神器 - pro2cmake.py
  • 【arXiv2024】时间序列|TimesFM-ICF:即插即用!时间序列预测新王者!吊打微调!
  • JavaScript 精度问题深度解析
  • Leetcode 3583. Count Special Triplets
  • 【C判断a*a+b*b=c*c且a>=b>0且输出最小的】2022-6-26
  • PS剪切蒙版全面教程
  • 03- 六自由度串联机械臂(ABB)动力学分析
  • PyTorch 实现 MNIST 手写数字识别
  • 第六章、6.2 ESP32低功耗模式详解:深度睡眠与轻度睡眠实战指南
  • 23种设计模式图解
  • 一夜冲刺!!微机原理与接口
  • Java语言 | ThreadLocal:原理、应用及注意事项
  • 汇川IS620N伺服驱动器如何通过etherCAT主站转profinet网关与西门子1200plc通讯
  • 6.15 操作系统面试题 锁 内存管理
  • 每天宜搭宜搭小知识—报表组件—日历热力图
  • NodeJS里经常用到require,require的模块加载机制是什么
  • DAY 50 超大力王爱学Python
  • 电磁场与电磁波篇---电荷电流
  • 【Markdown】基础用法汇总(标题、列表、链接、图片、加粗斜体、上下角标、引用块、代码块、公式)
  • 西安网站自然排名优化/腾讯企业qq
  • 营销型网站套餐/谷歌浏览器下载电脑版
  • 开发网站公司排行榜/百度知道网页版登录入口
  • 乐站_网站建设_自助建站/南宁seo服务优化
  • 做网站是咋收费的/浙江网络推广公司
  • 高要网站制作/给网站做seo的价格