本文是参考谭浩强的《C程序设计》第二版一书所写,总感觉有些重点的地方书中没有提出来,等本人遇到其他重要用法的时候再来补充,或者大家帮我提出来,以便共同学习。
1、用typedef声明新的类型名来代替已有的类型名
typedef int INTEGER;
typedef float REAL;
这样以下两行代码就可以等价替换了
int i,j;float a,b;
INTEGER i,j;REAL a,b;
2、用typedef声明一个结构体
typedef struct
{int month;
int day;
int year;
}DATE;
声明新类型名DATE,它代表上面指定的一个结构体类型,这时就可以用DATE定义变量。
DATE birthday
DATE *p
其中birthday是一个结构体,具体内容同上DATE结构体。
下面举个例子,是在STM32单片机的流水灯程序中用到的一个结构体。
typedef struct
{
uint16_t GPIO_Pin; /*!< Specifies the GPIO pins to be configured.
This parameter can be any value of @ref GPIO_pins_define */
GPIOSpeed_TypeDef GPIO_Speed; /*!< Specifies the speed for the selected pins.
This parameter can be a value of @ref GPIOSpeed_TypeDef */
GPIOMode_TypeDef GPIO_Mode; /*!< Specifies the operating mode for the selected pins.
This parameter can be a value of @ref GPIOMode_TypeDef */
}GPIO_InitTypeDef;
GPIO_InitTypeDef GPIO_InitStructure;
这里结构体又嵌套了一个2个结构体,GPIOSpeed_TypeDef、GPIOMode_TypeDef,他们有着跟本结构体相同的定义方式,我们来看一下:
typedef enum
{
GPIO_Speed_10MHz = 1,
GPIO_Speed_2MHz,
GPIO_Speed_50MHz
}GPIOSpeed_TypeDef;
typedef enum
{ GPIO_Mode_AIN = 0x0,
GPIO_Mode_IN_FLOATING = 0x04,
GPIO_Mode_IPD = 0x28,
GPIO_Mode_IPU = 0x48,
GPIO_Mode_Out_OD = 0x14,
GPIO_Mode_Out_PP = 0x10,
GPIO_Mode_AF_OD = 0x1C,
GPIO_Mode_AF_PP = 0x18
}GPIOMode_TypeDef;
上面我们用GPIO_InitTypeDef GPIO_InitStructure来定义了一个GPIO_InitStructure结构体,他的元素跟GPIO_InitTypeDef一样,我们可以用下面的语句方式来对结构体进行填充
GPIO_InitStructure.GPIO_Pin = DS1_PIN|DS2_PIN|DS3_PIN|DS4_PIN;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_Out_PP;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
3、用typedef声明数组
如定义数组,原来用如下形式:
int a[10],b[10],c[10],d[10];
由于都是一维数组,大小也相同,可以先将此数组类型声明为一个名字:然后用ARR区定义数组变量:
typedef int ARR[10];
ARR a,b,c,d;