点击上方公众号名称关注,获得更多内容

✎ 编 者 悟 语

想起青春追寻的昨天,你也是曾经追风的少年。

文 章 导 读

今天给小伙伴们介绍下用宏对数组值进行分类使用的方式,比较大的程序中的寄存器经常会这么搞,你也可以在自己的程序中使用这种代码组织方式让结构更加清晰,希望对小伙伴们有所帮助哈,

1数组和宏勾搭到一起的效果

在一些大的程序中,你会发现一些初看之下不知道它要干什么,但仔细探究一下你会发现,那可能是一种好的程序架构或考虑。

将数组要复制的值进行同类型封装,通过实例查找函数通过数组去查找实例并进行操作,可以让代码结构更清晰,更有规律可循。

具体的形式看下面的代码吧,说两句只为让小伙伴们多注意一下撸代码时的意识,要有大局观,要有架构意识。

2实例代码

ArrayMacro.h如下,它的作用如何,说明在注释里了哈。

 #ifndef _ARRAYMACRO_H_#define _ARRAYMACRO_H_

/* 实际的在比较的程序或芯片的官方代码中,会将相关的寄存器操作用宏放到一起,作为数组值   下面的数值或字符可以换成宏,然后通过移位屏蔽置位等方式去做配置寄存器等的操作    程序为了演示的方便,数组元素为数字或字符 */ 

/* 例如CAN时钟开启可以如下定义,其中kCLOCK_Can1等的是枚举值,有具体的定义 

#define FLEXCAN_CLOCKS                             \    {                                              \        kCLOCK_IpInvalid, kCLOCK_Can1, kCLOCK_Can2 \    }  static const clock_ip_name_t s_flexcanClock[] = FLEXCAN_CLOCKS;*/ // -1占位 #define  OneDimArray_one       \   {                           \       -1,                     \           1,                      \       2,                      \       3                       \   }

// 直接的写法   #define  OneDimArray_two       { '-1','a','b','c' }

#define  TwoDimArray           \   {                           \       {-1,-1,-1},             \            {11,22,33},             \       {44,55,66},             \       {77,88,99}              \                         }   

#endif _ARRAYMACRO_H_

ArrayMacro.c代码如下。

 #include #include 

#include "ArrayMacro.h"

int main(int argc, char *argv[]) {

     int i,ii,j,k;

     int  o_OneDimArray[] = OneDimArray_one;     int  t_OneDimArray[] = OneDimArray_two;      int  s_TwoDimArray[][4] = TwoDimArray;

     // 下面的循环就是做些遍历查找的工作,在实际代码中,你可以取做些配置等的操作     for(i = 0; i      {          if(3 == o_OneDimArray[i])          {               printf("\n一维数组查找值:%d\n",i);               printf("do something!\n");          }

     } 

     for(ii = 0; ii      {

          if('a' == t_OneDimArray[ii])          {               printf("\n一维数组查找字符值:%c\n",t_OneDimArray[ii]);               printf("do something!\n");          }

     } 

     for(j = 0; j      {

          for(k = 0; k           {              if(77 == s_TwoDimArray[j][k])              {                    printf("\n二维数组查找值:%d\n",s_TwoDimArray[j][k]);                    printf("do something!\n");               }           }

     }

     return 0;}

运行结果如下。

总结

今天给小伙伴们介绍了用宏对数组值进行分类使用的方式,大家可以在自己的程序中去试试哈,这种代码组织方式让结构更加清晰。后面还会有C语言相关的内容,大家敬请期待哈,

有问题可以后台留言交流,公众号18年后新申请的,文章后不支持留言功能的。

相关文章:

利用结构数组和函数指针查找法调用函数

用掩码数组和枚举增强C代码的可读性

编程意识篇——用结构存储数据以减少函数二次调用,能替代return返回值吗

C语言中一个分号的奇迹(预处理、指针、结构体、内存分配)——一段暗藏玄机的代码

malloc为什么不能在函数体外给全局变量分配内存

宏分类的妙用(排版开始用模板)

用结构体和指针模拟配置芯片引脚输出高低电平

进化论——从函数指针到被结构封装的函数指针及参数的应用举例

专辑推荐:

Python技能专辑

C语言专辑

IDE调试专辑

软件推荐专辑

软实力专辑

Linux专辑

扫码关注我们

Game Over!

c++如何定义二维数组结构体_原来数组还可以这么玩(宏把数组玩坏了)相关推荐

  1. c++ new一个结构体_「C/C++」构造类型及应用:数组、结构体、共用体、枚举类型...

    3.1数组 同类型.同性质.按顺序存放的一组数据集合,易于批量处理. 3.1.1一维数组 定义 int 1.数组名为常量,指向首地址,由系统指定. 2.数组长度为整型常量,但不能为0 3.上例取值im ...

  2. 技术图文:如何在Python中定义二维数组?

    背景 前几天,有位同学问我如下的问题: "temp[0][0]修改后,为什么temp[1][0].temp[2][0]也发生了变化?" "在Python中二维数组是怎样定 ...

  3. C++ 基础入门 之 结构体/结构体定义和使用/结构体数组/结构体指针/ 结构体嵌套结构体/结构体做函数参数/结构体中 const 使用场景/结构体案例

    C++ 基础入门 之 结构体/结构体定义和使用/结构体数组/结构体指针/ 结构体嵌套结构体/结构体做函数参数/结构体中 const 使用场景/结构体案例 目录 一.简单介绍 二.结构体定义和使用 三. ...

  4. C语言自定义数据类型(二)使用结构体数组

    一个结构体变量中可以存放一组有关联的数据(如一个学生的学号.姓名.成绩等数据).如果有 10 个学生的数据需要参加运算,显然应该用数组,这就是结构体数组.结构体数组与以前介绍过的数值型数组的不同之处在 ...

  5. C/C++定义二维数组(矩阵)

    1. 确定维度定义 int rows=4; int cols=5; int n2Arr[rows][cols];//错误,矩阵维度必须为常数 int n2Arr[4][5]; //正确,定义了4*5的 ...

  6. 【转】java中定义二维数组的几种写法

    原文链接 注:以下的 type[][] var 也可以这样申明 type var[][] type为数组的类型,var为变量名 写法一:行列固定的数组 //定义二维数组写法1 class Test { ...

  7. 关于定义二维数组时为什么可以省略行,而不可以省略列

    最近在复习c语言,看到二维数组的定义时,有省略行的定义方法,如arr[][10],但为什么没有省略列的定义方法呢? 我个人理解是:将一个二维数组看成若干一维数组,每一行就是一个一维数组,而二维数组的列 ...

  8. 【C++】结构体 - 定义和使用,结构体数组,结构体指针,结构体嵌套结构体,结构体做函数参数,结构体 const

    文章目录 1. 定义和使用 2. 结构体数组 3. 结构体指针 4. 结构体嵌套结构体 5. 结构体做函数参数 6. 结构体 const 1. 定义和使用 结构体属于用户自定义的数据类型,允许用户存储 ...

  9. C语言结构体的定义与使用、结构体数组、指向结构体的指针(有代码详解)

    1.结构体的定义与使用 结构体是一种构造数据类型 把不同类型的数据组合成一个整体 结构体的定义形式: struct 结构体名{结构体所包含的变量或数组 }; 结构体是一种集合,它里面包含了多个变量或数 ...

最新文章

  1. 如何在 Linux 上使用 kill 和 killall 来管理进程
  2. Java 设计模式 --- 单例模式
  3. JMX:一些入门说明
  4. 5.4万Star全部归零,项目作者:十分后悔
  5. bzoj 1601: [Usaco2008 Oct]灌水(最小生成树)
  6. 【软件解决】 解决 TortoiseSVN 图标不显示问题
  7. java strtus2 DynamicMethodInvocation配置(二)
  8. nslookup java_使用JAVA实现nslookup命令
  9. 飞鱼星路由器常见问题解答
  10. Operations-ansible-01
  11. 使用GF集进行构型综合的方法之总结
  12. JAVA接入微信刷脸支付分支付【V2、V3两种接入都有提供】
  13. 激光 pm2.5传感器 攀藤科技 stm32 调试通过
  14. 科学教育类毕业论文文献都有哪些?
  15. 自己动手,组建简单好用的NAS!(上)
  16. Java安卓如何添加悬浮窗_Android桌面悬浮窗效果实现
  17. 职业教育增长,正在“电商化”
  18. winwebmail的设置方法
  19. 中国软件开发外包公司排名-国内最大的软件开发商有哪些呢
  20. 寻找合适的研发效能度量指标(中)

热门文章

  1. 永远不要在代码中使用「User」这个单词
  2. Dubbo 管理能力弱?Dubbo Admin 发布 v0.1 助力服务管理能力!
  3. 程序员的核心竞争力究竟是什么?
  4. 为了方便读者检索和阅读以往的内容,已开通“号内搜”功能
  5. python类的函数_python 类函数
  6. python截取逗号_Python基础知识: 元组
  7. 深度学习图像搜索与识别
  8. unable to execute clang-tidy
  9. CDCN 活体检测笔记
  10. Windows 软件推荐2020