結構體就是一個可以包含不同數據類型的一個結構,它是一種可以自己定義的數據類型。
首先結構體可以在一個結構中聲明不同的數據類型。
第二相同結構的結構體變量是可以相互賦值的,而數組是做不到的,因為數組是單一數據類型的數據集合,它本身不是數據類型(而結構體是),數組名稱是常量指針,所以不可以做為左值進行運算,所以數組之間就不能通過數組名稱相互復制了,即使數據類型和數組大小完全相同。
第三,節省內存空間
第四,高效率。
枚舉工作模式:
typedef enum
{
GPIO_Mode_IN = 0x00, /*!< GPIO Input Mode */
GPIO_Mode_OUT = 0x01, /*!< GPIO Output Mode */
GPIO_Mode_AF = 0x02, /*!< GPIO Alternate function Mode */
GPIO_Mode_AN = 0x03 /*!< GPIO Analog In/Out Mode */
}GPIOMode_TypeDef ;
枚舉工作速度:
typedef enum
{
GPIO_Speed_Level_1 = 0x01, /*!< Medium Speed */
GPIO_Speed_Level_2 = 0x02, /*!< Fast Speed */
GPIO_Speed_Level_3 = 0x03 /*!< High Speed */
}GPIOSpeed_TypeDef ;
定義結構體類型:
typedef struct
{
GPIOMode_TypeDef GPIO_Mode ;
GPIOSpeed_TypeDef GPIO_Speed ;
}GPIO_InitTypeDef ;
定義初始化結構體變量及賦值:
GPIO_InitTypeDef GpiocInit; //定義變量
GpiocInit.GPIO_Mode = GPIO_Mode_IN; //變量賦值
GpiocInit.GPIO_Speed = GPIO_Speed_Level_2;
形參為結構體的函數定義:
GPIO_Init(GPIO_InitTypeDef init);
形參為結構體的函數:
GPIO_Init(GPIO_InitTypeDef init)
{
x = init.GPIO_Mode ; // x = 0x00
y = init.GPIO_Speed ; // y = 0x02
}
形參為結構體變量的函數調用:
GPIO_Init(GpiocInit) ;
例2:
定義字符庫結構體:
typedef struct typFNT_ASC16
{
char Index[1];
char Msk[16];
}ZiFuKu;
結構體幅值
const ZiFuKu ASC_16[] =
{
"1",0x00,0x00,0x08,0x08,0xFC,0x00,0x00,0x00,0x00,0x00,0x04,0x04,0x07,0x04,0x04,0x00,
"2",0x00,0x00,0x08,0x04,0x84,0x44,0x38,0x00,0x00,0x00,0x06,0x05,0x04,0x04,0x04,0x00,
"3",0x00,0x00,0x08,0x04,0x44,0x44,0xB8,0x00,0x00,0x00,0x02,0x04,0x04,0x04,0x03,0x00,
"4",0x00,0x00,0x80,0x60,0x18,0xFC,0x00,0x00,0x00,0x00,0x01,0x01,0x05,0x07,0x05,0x00
}