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

C语言数据结构笔记6:使用宏和指针来设置和操作嵌套在结构体中的联合体数组的特定位

使用宏和指针来设置和操作嵌套在结构体中的联合体数组的特定位

 

目录

直接贴代码了:

 

直接贴代码了:

主要时要注意在嵌入式开发中,指针的使用

需要申请内存,然后及时释放

指针使用前后也要及时指向NULL

否则,它指向地址的值可能会被改变、清零,乃至程序直接卡死都有可能

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <stdint.h>  // 确保包含此头文件以使用 uint8_t// 定义宏来设置特定位
#define SET_BIT(reg_ptr, bit) ((reg_ptr)->byte |= (1 << (bit)))
// 定义宏来清除特定位
#define CLEAR_BIT(reg_ptr, bit) ((reg_ptr)->byte &= ~(1 << (bit)))typedef union {uint8_t byte;  // 整个字节数组访问struct {uint8_t b0 : 1;uint8_t b1 : 1;uint8_t b2 : 1;uint8_t b3 : 1;uint8_t b4 : 1;uint8_t b5 : 1;uint8_t b6 : 1;uint8_t b7 : 1;} bits;
} _02_regs;typedef struct MB_Funccode_regs {_02_regs Failure_Malfunction[15]; // 故障异常 //0x03e8 - 0x045f (120个元素)// 假设 _04_regs_A 定义在其他地方
} MB_regs;MB_regs test_regs;int main() 
{uint16_t start_addr;_02_regs *reg_ptr = NULL;reg_ptr = (_02_regs *)malloc(sizeof(_02_regs));reg_ptr = &test_regs.Failure_Malfunction[0];    // 设置第0个字节start_addr =1;// 清除第0个字节的第1位SET_BIT(reg_ptr,(start_addr - 0)%8);// 打印结果以验证printf("Byte 0 _ bit 1: 0x%02X\n", test_regs.Failure_Malfunction[0].byte);reg_ptr = NULL;free(reg_ptr);return 0;
}

 

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

相关文章:

  • OC学习—Block初探(简易版)
  • 【实战指南】前端项目Nginx配置全流程:从打包部署到解决跨域/路由循环问题
  • 在C# 中使用建造者模式
  • 算法题(167):FBI树
  • Oracle日志体系和遇到问题后日志排查路径
  • 行为模式-责任链模式
  • 进行性核上性麻痹健康护理指南:全方位照护之道
  • Pytorch 的编程技巧
  • Java八股文——Spring「Spring 篇」
  • 5.4.2树、森林与二叉树的转换
  • 今日行情明日机会——20250611
  • Android GreenDAO 通过 Key 查询数据库数据慢问题优化
  • 13.自治系统路由计算题
  • Node.js:开启现代服务器端编程的新篇章
  • h5fortran 简介与使用指南
  • 新能源知识库(36)什么是BMU
  • 51LA数据分析遇瓶颈?免费统计工具——悟空统计
  • 大话软工笔记—工程分解
  • GlusterFS分布式文件系统
  • 【Keepalived】Keepalived-2.3.4恢复对RHEL7的支持
  • 第七章: SEO与渲染方式 三
  • (十一)优化算法(Optimization):深度学习训练中的收敛性分析与泛化理论
  • 鹰盾视频加密器Windows播放器AI溯源水印技术方案解析
  • ros2--Sophus
  • “新液冷”破题“智算热”,数字经济低碳化发展新解
  • 【Linux】Linux 操作系统 - 22 , 软硬链接详解 !
  • 104.解决在流式回答功能实现之后上传附件功能失效bug之前端处理
  • DAY 28 类的定义和方法
  • 三代社保卡全字段识别-社保卡识别软件-社保卡识别接口集成
  • 结合redis实现文件分片秒传断点续传