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