新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > c語言結構體數組初始化

        c語言結構體數組初始化

        作者: 時間:2016-11-27 來源:網絡 收藏
        最近看一段代碼有所迷惑,先簡單總結一下。有關結構體數組初始化的問題

        struct _m_usmart_nametab usmart_nametab[]=

        本文引用地址:http://www.104case.com/article/201611/322298.htm{
        #if USMART_USE_WRFUNS==1 //如果使能了讀寫操作
        (void*)read_addr,"u32 read_addr(u32 addr)",
        (void*)write_addr,"void write_addr(u32 addr,u32 val)",
        #endif
        (void*)delay_ms,"void delay_ms(u16 nms)",
        (void*)delay_us,"void delay_us(u32 nus)",
        (void*)LCD_Clear,"void LCD_Clear(u16 Color)",
        (void*)LCD_Fill,"void LCD_Fill(u16 xsta,u16 ysta,u16 xend,u16 yend,u16 color)",
        (void*)LCD_DrawLine,"void LCD_DrawLine(u16 x1, u16 y1, u16 x2, u16 y2)",
        (void*)LCD_DrawRectangle,"void LCD_DrawRectangle(u16 x1, u16 y1, u16 x2, u16 y2)",
        (void*)Draw_Circle,"void Draw_Circle(u16 x0,u16 y0,u8 r)",
        (void*)LCD_ShowNum,"void LCD_ShowNum(u16 x,u16 y,u32 num,u8 len,u8 size)",
        (void*)LCD_ShowString,"void LCD_ShowString(u16 x,u16 y,u16 width,u16 height,u8 size,u8 *p)",

        (void*)LCD_ReadPoint,"u16 LCD_ReadPoint(u16 x,u16 y)",
        (void*)fsmc_sram_test_write,"void fsmc_sram_test_write(u8 data,u32 addr)",
        (void*)fsmc_sram_test_read,"u8 fsmc_sram_test_read(u32 addr)",

        (void*)mymalloc,"void *mymalloc(u8 memx,u32 size)",
        (void*)myfree,"void myfree(u8 memx,void *ptr)",

        (void*)mf_mount,"u8 mf_mount(u8 drv)",
        (void*)mf_open,"u8 mf_open(u8*path,u8 mode)",
        (void*)mf_close,"u8 mf_close(void)",
        (void*)mf_read,"u8 mf_read(u16 len)",
        (void*)mf_write,"u8 mf_write(u8*dat,u16 len)",
        (void*)mf_opendir,"u8 mf_opendir(u8* path)",
        (void*)mf_readdir,"u8 mf_readdir(void)",
        (void*)mf_scan_files,"u8 mf_scan_files(u8 * path)",
        (void*)mf_showfree,"u32 mf_showfree(u8 *drv)",
        (void*)mf_lseek,"u8 mf_lseek(u32 offset)",
        (void*)mf_tell,"u32 mf_tell(void)",
        (void*)mf_size,"u32 mf_size(void)",
        (void*)mf_mkdir,"u8 mf_mkdir(u8*pname)",
        (void*)mf_fmkfs,"u8 mf_fmkfs(u8 drv,u8 mode,u16 au)",
        (void*)mf_unlink,"u8 mf_unlink(u8 *pname)",
        (void*)mf_rename,"u8 mf_rename(u8 *oldname,u8* newname)",
        (void*)mf_gets,"void mf_gets(u16 size)",
        (void*)mf_putc,"u8 mf_putc(u8 c)",
        (void*)mf_puts,"u8 mf_puts(u8*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"};//這是一個賦值語句,也可以作為初始化??梢猿霈F在程序的任何地方。

        當然也可以使用復合字面量來初始化:

        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={}}



        評論


        技術專區

        關閉
        主站蜘蛛池模板: 富顺县| 安丘市| 浦县| 沅江市| 抚宁县| 秦安县| 荣成市| 双鸭山市| 孝感市| 铜梁县| 察雅县| 洪洞县| 辽源市| 九台市| 邮箱| 岚皋县| 洪雅县| 雷州市| 江山市| 寿光市| 平顺县| 永靖县| 竹溪县| 洪泽县| 威信县| 天门市| 金山区| 兴义市| 安泽县| 黄冈市| 三河市| 灵山县| 台东县| 屏南县| 都江堰市| 东源县| 德格县| 舟曲县| 永和县| 临海市| 长泰县|