c语言结构体数组怎么初始化,c语言结构体数组初始化「建议收藏」

最近看一段代码有所迷惑,先简单总结一下。有关结构体数组初始化的问题

struct  _m_usmart_nametab usmart_nametab[]=

{

#if USMART_USE_WRFUNS==1 //如果使能了读写操作

void*)read_addr,”u32 read_addru32 addr)”,

void*)write_addr,”void write_addru32 addr,u32 val)”,

#endif

void*)delay_ms,”void delay_msu16 nms)”,

void*)delay_us,”void delay_usu32 nus)”,

void*)LCD_Clear,”void LCD_Clearu16 Color)”,

void*)LCD_Fill,”void LCD_Fillu16 xsta,u16 ysta,u16 xend,u16 yend,u16 color)”,

void*)LCD_DrawLine,”void LCD_DrawLineu16 x1, u16 y1, u16 x2, u16 y2)”,

void*)LCD_DrawRectangle,”void LCD_DrawRectangleu16 x1, u16 y1, u16 x2, u16 y2)”,

void*)Draw_Circle,”void Draw_Circleu16 x0,u16 y0,u8 r)”,

void*)LCD_ShowNum,”void LCD_ShowNumu16 x,u16 y,u32 num,u8 len,u8 size)”,

void*)LCD_ShowString,”void LCD_ShowStringu16 x,u16 y,u16 width,u16 height,u8 size,u8 *p)”,

void*)LCD_ReadPoint,”u16 LCD_ReadPointu16 x,u16 y)”,

void*)fsmc_sram_test_write,”void fsmc_sram_test_writeu8 data,u32 addr)”,

void*)fsmc_sram_test_read,”u8 fsmc_sram_test_readu32 addr)”,

void*)mymalloc,”void *mymallocu8 memx,u32 size)”,

void*)myfree,”void myfreeu8 memx,void *ptr)”,

void*)mf_mount,”u8 mf_mountu8 drv)”,

void*)mf_open,”u8 mf_openu8*path,u8 mode)”,

void*)mf_close,”u8 mf_closevoid)”,

void*)mf_read,”u8 mf_readu16 len)”,

void*)mf_write,”u8 mf_writeu8*dat,u16 len)”,

void*)mf_opendir,”u8 mf_opendiru8* path)”,

void*)mf_readdir,”u8 mf_readdirvoid)”,

void*)mf_scan_files,”u8 mf_scan_filesu8 * path)”,

void*)mf_showfree,”u32 mf_showfreeu8 *drv)”,

void*)mf_lseek,”u8 mf_lseeku32 offset)”,

void*)mf_tell,”u32 mf_tellvoid)”,

void*)mf_size,”u32 mf_sizevoid)”,

void*)mf_mkdir,”u8 mf_mkdiru8*pname)”,

void*)mf_fmkfs,”u8 mf_fmkfsu8 drv,u8 mode,u16 au)”,

void*)mf_unlink,”u8 mf_unlinku8 *pname)”,

void*)mf_rename,”u8 mf_renameu8 *oldname,u8* newname)”,

void*)mf_gets,”void mf_getsu16 size)”,

void*)mf_putc,”u8 mf_putcu8 c)”,

void*)mf_puts,”u8 mf_putsu8*c)”,

};

_m_usmart_nametab的结构体如下

//函数名列表

struct _m_usmart_nametab

{

void* func; //函数指针

const u8* name; //函数名查找串)

};

一开始一直不明白,为什么下边的只有两个参数,而上边的确有那么多,难道不是一一对应?

其实上边的是一个table表,就像 u8 table[]={};

而上边的定义的是一个结构体的数组,其成员很多。但每一个成员应该和结构体类型一致,这只不是定义一个这样结构类型的结构体数组而已。

看下面例子

typedef struct _TEST_T {

int i;

char c[10];

}TEST_T;

TEST_T gst = {1, “12345”};//可以初始化,设置i为1,s为一个字符串.

TEST_T gst = {1};//初始化个数少于实际个数时,只初始化前面的成员。

TEST_Tgst = {.c=“12345”};//有选择的初始化成员。

复合字面量。

gst = TEST_T){122, “1256”};//这是一个赋值语句,也可以作为初始化。可以出现在程序的任何地方。

当然也可以使用复合字面量来初始化:

gst = TEST_T){.i=122, .c=”123″};

3、结构体数组

可以用多个大括号括起来:

TEST_T gst[10] = {
{},{},{},{}}

也可以初始化其中的一个元素:

TEST_T gst[10] = {[2]={}, [3]={}}

也可以使用复合字面量:

TEST_T gst[10] = {[2].i=0, [3].i={}}

Published by

风君子

独自遨游何稽首 揭天掀地慰生平

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注