STC89C52的结构体

C51程序设计有时需要将一批基本类型的数据放在一起使用,从而引入了所谓构造类型数据,前面学习的数据就是一种构造类型的数据,一个数组实际上是一批顺序存放的相同类型数据。结构体也是一种结构类型数据。

结构体
它是将若干个不同类型的数据变量有序地组合在一起而形成的一种数据集合体。

一般来说,结构体中各个变量之间是存在某些联系的,例如时间的时分秒,日期中的年月日

1.结构体类型定义
1)结构体类型定义的一般格式为:
struct 结构体名
{结构体元素表};

2)其中,"结构体元素表"为该结构体中的各个成员,由于结构体可以由不同类型的数据组成,因此对结构体中各个成员都要进行类型说明。
例如,一个日期结构体类型date,它由三个结构体元素year,month,day组成,定义格式如下:
struct date{
unsigned int year;
unsigned char month,day;
};

3)定义一个结构体类型只是给出了改结构体的组织形式,并没有给出具体的组织成员(结构体变量),因此结构体名不占用任何储存空间,也不能对一个结构体名进行赋值、存取和运算。

2.结构体变量定义
1)结构体变量则是一个结构体中的具体的组织成员,编译器会分配确定的储存空间,因此可以对结构体变量名进行赋值,存取和运算。定义好一个结构体类型后,就可以用它来定义结构体变量,一般格式为:
struct 结构体名 结构体变量1,结构体变量2,结构体变量3。。。。

  1. 例如 可以用结构体date来定义两个结构体变量d1和d2;
    struct date d1,d2;
    结构体变量d1和d2都具有struct date类型的结构体,即他们都是由一个无符号整形数据和两个无符号字符型数据所组成的。

  2. 定义结构体类型的同时定义结构体变量名
    struct date{
    unsigned int year;
    unsigned char month,day;

    }d1,d2;
    3.结构体变量的引用
    1)定义了一个结构体变量后,就可以对它进行引用,完成赋值,存取和运算等,引用结构体元素的一般格式:
    结构体变量名.结构体元素
    其中,是存取结构体元素成员运算符。例如,d1.year表示引用结构体变量d1中的元素year。
    2)对结构体变量中的各个元素可以像普通变量一样进行赋值,存取,运算。
    例如:
    d1.year=2017;
    d1.month=5;
    d1.day=13;

4.结构体型指针
1)指向结构体类型变量的指针称为结构体型指针,该指针变量的值是它所指向的结构体变量的起始地址。
2)定义结构体型指针一般格式为:
strcut 结构体类型标识符 *结构体指针标识符
如前面的date结构体类型,用struct date *pd1;这里pd1就可以用来指向date类型的结构体变量。
结构体型指针与一般指针相同,必须先赋值后才能引用。
pd1=&d1; //结构体指针变量赋值,指向结构体变量d1
3)通过结构体型指针引用结构体元素的一般格式为:
结构体指针->结构体元素
与结构体变量引用结构体元素的格式相比,这里只不过是用符号"->"(减号大于号)取代了符号"."而已。
例如Pd1->year完全等效于d1.year

5.将结构体型指针作为函数的参数
1)当一个结构体较大的时候,若将该结构作为函数的参数,由于参数传递采用的是值传递方式,需要较大的储存空间(堆栈),将所有结构体元素压栈和出栈,此外还会影响程序的执行速度。
实际上可以用结构体型指针作为函数参数,此时参数传递是按地址传递方式进行的。由于采用地址传递方式,只需要传递一个地址值,与前者相比,既可以节省储存空间,同时还可以加快程序执行的速度。
例如:
struct date d1; //定义结构体变量
struct date *pd1; //定义结构体指针变量
void SetDate(struct date *dat)
{
dat->year=2017;dat->month=5;dat->day=13;
}
pd1=&d1; //指向结构体变量d1
SetDate(pd1); //结构体指针作为函数参数

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值