已然已然相同长度单元格能放在一同,比方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);
}
}