目录
接上一篇博客 [嘻嘻]
一、struct
struct 用于定义结构体类型,其作用是将不同数据类型的数据组合在一起,构造出一个新的数据类型。struct 一般用法如下:
struct [结构体名]
{
类型标识符 成员名 1;
类型标识符 成员名 2;
.
.
.
类型标识符 成员名 3 ;
}结构体变量;
例如:
struct person
{
char name[8];
int age;
char sex[8];
char address[20];
}person_liu;
结构体变量(如上例中的 person_liu )可以不在定义结构体时定义,后续需要时再进行定义,格式如下:
struct 结构体名 结构体变量;
例如:
struct person
{
char name[8];
int age;
char sex[8];
char address[20];
};
struct person person_liu;
使用这种定义方式可以同时定义多个结构体变量,例如:
struct person person_liu, person_wang, person_shang;
结构体变量的使用如下形式:
结构体变量名.成员名
例如:
person_liu.age = 35;
STM32 开发中很多时候将 struct 与 typedef 的结合使用,具体内容下面会提及。
注意结构体内存对齐问题,接下来我将会在另一篇博客说明的。
二、enum
有时一个变量会有几种可能的取值,如一个星期有7天、每学期开始的课程、12种不同的颜色(红、橙、黄、绿、青、蓝、紫、灰、粉、黑、白、棕)等,C语言提供一种 enum 枚举类型,用来将变量或对象的所有可能的值一一列出,变量取值只限于列举出来的值。
enum 枚举型的用法如下:
enum 枚举名
{
枚举成员 1,
枚举成员 2,
.
.
.
枚举成员 n // 注意最后一个成员后面是不要加逗号的
}枚举变量;
例如:
enum Color
{
RED,
GREEN,
BLACK,
YELLOW
};
enum枚举类型是一个集合,将所有可能的取值用花括号括住,花括号的各枚举成员之间用逗号分开,最后一个枚举成员后省略逗号。enum 枚举类型以分号结束,这里的枚举变量可以省略,再后面需要再根据枚举名进行定义。
上述名为 Color 的枚举类型只有4个成员:RED, GREEN, BLACK, YELLOW,即意味着 Color 类型变量的取值只能取这4种颜色中的某一种颜色。
例如,利用 enum 定义一个 Weekdays 枚举类型名,包括7个枚举成员:从星期一到星期日,并定义枚举变量 Mydays 与 Olddays 。
enumWeekdys
{
Monday = 1,
Tuesday,
Wednesday,
Thursday,
Friday,
Saturday,
Sunday
}Mydays, Olddays;
注意:enum 枚举类型具有自动编号功能,第一个枚举成员的默认值为整型的0,后续枚举成员的之后在前一个成员值上自动加1,也可以自定义枚举成员的值,若把第一个枚举成员的值定义为1,则第二个枚举成员的值就是常量2而不是什么变量,不能在程序中用赋值语句再对它赋值,但可以将枚举值赋给枚举变量。
例如,以下两条语句是正确的
Mydays = Thursday;
Olddays = Friday;
但以下两条语句是错误的:
Tuesday = 0;
Myday = 1;
三、typedef
typedef 用于为复杂的声明定义一个简单的别名,它不是一个真正意义上的新类型。再编程中使用 typedef 的目的一般有两个:一是为变量起一个容易记忆且意义上明确的新名称;二是简化一些比较复杂的类型声明。基本格式如下:
typedef 类型名 自定义的别名;
例如:
typedef signed char int8_t; //为数据类型 signed char 起别名 int8_t
typedef signed int int32_t; ///为数据类型 signed int 起别名 int32_t
STM32开发中,typedef 主要有以下三种用法。
1、typedef 的基本应用
为已知的数据类型起一个简单的别名,如上例。
2、typedef 与结构体 struct 结合使用
typedef struct
{
char name[8];
int age;
char sex[8];
char address[20];
}personn_messages;
personn_messages person //结构体变量名.成员名
person.name;
person.age;
3、typedef 与 enum 结合使用
利用 typedef 关键字将枚举类型定义成别名,并利用该别名进行变量声明。
typedef enum
{
Monday = 1,
Tuesday,
Wednesday,
Thursday,
Friday,
Saturday,
Sunday
}Weekdys_Typedef;
Weekdys_Typedef weekdays;
weekdays.Monday;
weekdays.Friday;