淘先锋技术网

首页 1 2 3 4 5 6 7

 

        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

 

 

 

转载于:https://www.cnblogs.com/lwangj/p/5061785.html