您的位置 首页 分销

51单片机之C言语-4.3结构体

既然既然相同长度单元格能放在一起,比如char1,char2,char3;int1,int2,int3;long1,long2,long3在实际使用中,有些变量长度是不一样的

已然已然相同长度单元格能放在一同,比方char1,char2,char3; int1,int2,int3; long1,long2,long3.在实际运用中,有些变量长度是不相同的,但由于它们之间彼此相关也需求放在一同,那么要是不同长度的变量,想放在一同有没有办法呢?当然能够,这个就叫做结构体。现在依照数组的学习办法来研讨结构体,两个问题,怎样界说;怎样拜访结构体成员。

(1) 怎样界说一个结构体

界说一个结构的一般方式为:

struct结构名

{成员表列};

成员表列由若干个成员组成,每个成员都是该结构的一个组成部分。对每个成员也必须作类型阐明,其方式为:

类型阐明符成员名;

成员名的命名应契合标志符的书写规则。例如:

struct stu

{

int num;

char name[20];

char sex;

float score;

}

由以上可见,经过struct来界说一个结构体名,然后描绘这个结构体中各个成员。struct stu类似于int或许char.为什么这么讲呢?咱们来看看char是什么,char便是固定化的存储空间,一个字节,int便是固定的两个字节。咱们知道变量是多样化的,现在我需求的变量既不是int 也不是char,而是int和char的归纳,那怎样办?这个便是结构体了。简略的讲,int,char是固定好的存储空间区分,struct stu是自界说存储空间区分。类似于许多软件中有默许的设置,还有自界说设置。了解这点,咱们来看看怎样界说结构体变量:

先来深化了解一下前面咱们是怎样界说变量的?比方char mystring, int mydata.这个是先区分存储空间然后,再给这个空间命名。比方char先要一个一个字节的单元格,然后给这个字节取个姓名叫mystring,相同int便是先要2个字节的单元格,然后给这两个字节取个姓名叫mydata. 相同关于结构体变量,咱们先要一个存储空间,然后给这个空间取个姓名。这个存储空间能够恣意由你界说。比方struct stu.然后给这个空间取个姓名,比方boy1.因而咱们就知道了怎样界说一个结构体变量。与其他变量并无差异。

struct stu boy1,boy2;等等。这儿小结一下,结构体变量界说一共有三种办法:

1)先界说结构,再阐明结构变量

struct stu

{

int num;

char name[20];

char sex;

float score;

}

struct stu boy1,boy2;

2) 在界说结构类型的一起阐明结构变量

struct stu

{

int num;

char name[20];

char sex;

float score;

}boy1,boy2;

3)直接阐明结构变量

struct

{

int num;

char name[20];

char sex;

float score;

}boy1,boy2;

第3种办法中省去了结构名。

(2)结构变量的初始化

和其他类型变量相同,对结构变量能够在界说时进行初始化赋值。

那么结构体的成员能否为数组?当然能够。咱们来看看怎样在结构体成员中让某个成员为数组

struct mystruct {

int age;

int score;

char sex;

char myarry[3];

};

struct mystruct boy1;

void main(void)

{

boy1.myarry[0]=4;

boy1.myarry[1]=2;

boy1.myarry[2]=3;

}

这中办法是经过给数组的成员一个一个赋值

(3) 结构体成员的拜访

那么怎样拜访结构体中的成员呢?咱们拜访数组的时分,比方数组a[4],我要拜访第三个成员,那么直接运用a[2],就能够了。那么拜访结构体成员,运用结构体变量加成员名,比方:

boy1.num

boy2.name

boy1.birthday.month

与一般变量完全相同。

#include “reg52.h”

typedef unsigned char uchar;

void delayUs(uchar t);

void delayMs(uchar t);

void main (void)

{

struct MyStruct

{

uchar DATA0;

uchar DATA1;

uchar DATA2;

uchar DATA3;

uchar DATA4;

uchar DATA5;

uchar DATA6;

uchar DATA7;

};

struct MyStruct MyData;

MyData.DATA0=0xfe;//点亮第1个LED

MyData.DATA1=0xfd;//点亮第2个LED灯

MyData.DATA2=0xfb;//点亮第3个LED灯

MyData.DATA3=0xf7;//点亮第4个LED灯

MyData.DATA4=0xef;//点亮第5个LED灯

MyData.DATA5=0xdf;//点亮第6个LED灯

MyData.DATA6=0xbf;//点亮第7个LED灯

MyData.DATA7=0x7f;//点亮第8个LED灯

while(1)

{

P1=MyData.DATA0;//点亮第1个LED灯

delayMs(100);

P1=MyData.DATA1;//点亮第2个LED灯

delayMs(100);

P1=MyData.DATA2;//点亮第3个LED灯

delayMs(100);

P1=MyData.DATA3;//点亮第4个LED灯

delayMs(100);

P1=MyData.DATA4;//点亮第5个LED灯

delayMs(100);

P1=MyData.DATA5;//点亮第6个LED灯

delayMs(100);

P1=MyData.DATA6;//点亮第7个LED灯

delayMs(100);

P1=MyData.DATA7;//点亮第8个LED灯

delayMs(100);

}

}

void delayUs(uchar t)

{

while(–t);

}

void delayMs(uchar t)

{

while(–t)

{

delayUs(245);

delayUs(245);

}

}

声明:本文内容来自网络转载或用户投稿,文章版权归原作者和原出处所有。文中观点,不代表本站立场。若有侵权请联系本站删除(kf@86ic.com)https://www.86ic.net/bandaoti/fenxiao/263511.html

为您推荐

联系我们

联系我们

在线咨询: QQ交谈

邮箱: kf@86ic.com

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部