ST用结构体的形式对寄存器组进行了封装,因此对结构体有一定的认识和了解,也是学习固件库的重要一步。
在C语言中,结构体就是指一种数据结构,他可以被声明为变量、指针或数组,用以实现复杂的数据结构。在MDK中有许多地方使用结构体以及结构体指针。
结构体定义如下所示:
Struct 结构体名{
成员列表:
}变量名列表;
结构体类型名字=关键字struct+结构体名,结构体名由用户指定,区别其他结构体类型。
如下结构体:
struct date //声明一个结构体类型
{
int month;
int day;
int year;
};
struce student //声明一个结构体类型
{
int num;
int name[20];
int sex;
int age;
struct date birthday; //brithday是struct date类型
};
这只是指定了一个结构体类型,他相当于一个模型,并无具体的数据,系统对其也不分配实际的内存单元,为了可以在程序中使用结构体类型数据,需要定义结构体类型变量,并在其中村放入数据。可以采取3中方法定义结构体类型变量:
1、先声明结构体类型再定义变量
struct student student1,student2;
如上已经定义一个结构体struct student,可以用它来定义变量,这种形式的定义有如"int a,b;"相似。
2、在声明类型的同时定义变量
struce student
{
int num;
int name[20];
int sex;
int age;
struct date birthday;
}student1,student2;
这样将声明类型和定义变量放在一起进行,能够直接看到结构体的结构,适合在写小程序时使用这种方法。
3、不指定类型名而直接定义结构体类型变量
struct {
int num;
int name[20];
int sex;
int age;
struct date birthday;
}student1,student2;
这样指定一个无名的结构体类型,不出现结构体名,因此无法再以此结构体类型去定义变量。
结构体变量的引用:
在定义了结构体变量之后,就需要引用这个变量,那么引用变量需要几个规则:
1、同类结构体可以互相赋值 如:
student1=student2;
2、用若干结构体成员运算符一级一级找到最低级成员,而且只能对最低级成员进行赋值或存取运算,如:
student1.num=10010;
student1.birthday.year=2001;
3、结构体变量成员可以像普通变量一样进行各种运算,如:
student1.score=student2.score;
sum=student1.score+student2.score;
结构体变量初始化举例:
#include<stdio.h>
void main()
{
struct student
{
long int num;
char name[20];
char sex;
car addr[20];
}a={10001,"li",'M',"beijing"}
printf("No.:% ld\nname:% s\nsex:% c\naddress:% s\n",
a.num,a.name,a.sex,a.addr);
}
其运行结果如下:
No.: 10001
name: li
sex: M
address: beijing