C语言结构体数组

C语言结构体数组:


今天在学习stm32的时候,被火哥的代码震惊到了,火哥的C语言结构体数组的初始化方式着实秀到我了,下面来分享一下火哥的操作:

传统的C语言结构体数组初始化:

传统的C语言结构体数组相信大家都会了,初始化方法十分简单:

typedef struct
{
	int 			age;
	const char* 	name;
	int				height;
}student;

student STU[]={
	{11,"张三",170},
	{12,"李四",181},
	{13,"王五",190}
};

以上都是基操,你直接在网上搜,或者看C语言入门教程都是这样教你的。下面来看一看火哥的操作!

比较秀的C语言结构体数组初始化:

火哥的操作发生在SPI_FLASH恢复出厂设置的代码里,感兴趣的小伙伴可以看看源码,来!直接上代码:

typedef struct
{
  const char*               filename;      //从SD卡拷录数据时的文件路径
  const char*               description;   //描述
  uint32_t                  start_addr;    //开始地址
  uint32_t                  length;        //长度
  Burn_Option_Typedef     burn_option;   
  
}Aux_Data_Typedef;

typedef enum 
{
    AUX_DATA_ERROR = -1,
  	AUX_XBF_XINSONGTI, 
    AUX_PYTAB, 
	AUX_GB2312,
    AUX_UNIGBK, 
	AUX_TOUCH, 
    AUX_FILE_SYSTEM,      //FLASH文件系统
    AUX_MAX_NUM,
} aux_data_t; 

Aux_Data_Typedef  burn_data[] =  
{
  [AUX_XBF_XINSONGTI] =
  {
    .filename           =   "0:/srcdata/新宋体16.xbf",
    .description        =   "XBF字库文件(emWin使用,新宋体16.xbf)",
    .start_addr         =   1*4096 ,
    .length             =   399*4096, 
    .burn_option      =  UPDATE,
  },
  
  [AUX_PYTAB] =
  {
    .filename           =   "0:/srcdata/拼音候选表.txt",
    .description        =   "拼音候选表(emwin键盘拼音输入时使用)",
    .start_addr         =   400*4096 ,
    .length             =   6*4096, 
    .burn_option      =  UPDATE,
  },
	
	 [AUX_GB2312] = 
  {
    .filename           =   "0:/srcdata/GB2312_H1616.FON",
    .description        =   "GB2312字库(修复HZLIB不支持标点的问题)",
    .start_addr         =   406*4096 ,
    .length             =   64*4096, 
    .burn_option      =  UPDATE,
  },
  
  [AUX_UNIGBK] =
  {
    .filename           =   "0:/srcdata/UNIGBK.BIN",
    .description        =   "文件系统中文支持编码库(emWin使用,UNIGBK.BIN)",
    .start_addr         =   470*4096 ,
    .length             =   43*4096,
    .burn_option      =  UPDATE,      
  },   

  [AUX_TOUCH] =
  {
    .filename           =   "0:/srcdata/触摸校准默认数据.BIN",
    .description        =   "触摸校准默认数据",
    .start_addr         =   513*4096 ,
    .length             =   1*4096,
    .burn_option       =  UPDATE,      
  },      	
  
  [AUX_FILE_SYSTEM] =
  {
    .filename           =   "",
    .description        =   "FATFS文件系统",
    .start_addr         =   514*4096 ,
    .length             =   1534*4096, 
    .burn_option      =  DO_NOT_UPDATE,
  }

};

代码有点长,我一一分析一下,首先,火哥定义了一个Aux_Data_Typedef结构体和一个aux_data_t枚举,枚举为-1的值这里没有用到,可以不看,然后剩下的枚举值是0~6共7个元素,相信以上各位都可以理解吧,接下来高能来了:

我们看一下火哥的结构体数组初始化方式,以结构体数组的第一个元素为例:以AUX_XBF_XINSONGTI枚举值为索引号用中括号括起来,然后把结构体成员的值赋值给中括号这个整体,然后结构体成员的赋值方式也很独特,以"." + “结构体成员名字” 的方式来赋值结构体成员的值

这一波操作属实是惊艳到我了,哎,可能这个操作对大佬来说都是基操吧,但对于我这样的小白来说实在是秀(可能是我第一次见的原因吧)哈哈哈!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

GuiStar_李什么恩

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值