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
    评论
### 回答1: STC15是一种常见的单片机,使用结构可以方便地管理和操作不同类型的数据。以下是一个简单的例子,演示如何在STC15单片机中使用结构: 首先,需要定义一个结构。假设我们要存储一个人的姓名、年龄和性别: ```c typedef struct { char name[20]; int age; char gender; } Person; ``` 在上面的例子中,我们使用typedef关键字定义了一个名为Person的结构,它包含了三个成员变量:name、age和gender。 接下来,我们可以使用该结构创建一个具的实例: ```c Person person1; ``` 现在我们可以给person1赋值: ```c strcpy(person1.name, "Tom"); person1.age = 20; person1.gender = 'M'; ``` 我们还可以将结构作为参数传递给函数,例如: ```c void printPerson(Person p) { printf("Name: %s\n", p.name); printf("Age: %d\n", p.age); printf("Gender: %c\n", p.gender); } ``` 在上面的例子中,我们定义了一个名为printPerson的函数,它接受一个Person类型的参数p,并打印出该参数的各个成员变量的值。 最后,我们可以调用该函数: ```c printPerson(person1); ``` 这将输出: ``` Name: Tom Age: 20 Gender: M ``` 使用结构可以方便地组织和管理数据,特别是当需要处理多个相关的数据时。在STC15单片机中,结构的使用和C语言中的使用方式相同。 ### 回答2: STC15单片机是一种常用的单片机,其结构用法主要指的是在编程过程中使用结构来管理和组织数据。 在STC15单片机中,结构是一种用户定义的数据类型,它可以将不同的数据类型组合到一起,形成一个整的数据结构。通过结构,可以方便地定义一组相关的变量,使程序具备良好的可读性和可维护性。 结构的使用步骤如下: 1. 定义结构类型:使用关键字typedef和struct来定义结构类型,并在花括号内定义结构成员变量的类型和名称。 2. 声明结构变量:根据定义的结构类型,在程序中声明结构变量,并为其分配内存空间。 3. 访问结构成员:使用点操作符(.)来访问结构变量的成员,可以进行赋值、取值等操作。 结构的应用场景包括但不限于以下几个方面: 1. 数据管理:可以使用结构来管理多个相关的数据,使数据的组织更为清晰、有序。 2. 参数传递:通过结构,可以将多个参数作为一个整传递给函数,简化了函数的参数列表,提高了代码的可读性。 3. 数据传输:在通信过程中,可以使用结构将各种不同类型的数据打包,方便传输和解析。 4. 存储管理:结构可以作为一种数据类型,用于定义和管理存储区域,比如定义EEPROM数据结构。 总之,STC15单片机结构用法可以有效地组织和管理数据,提高编程效率和代码的可读性,使程序设计更加灵活和便捷。 ### 回答3: STC15单片机是一种常用的51系列单片机,它可以通过定义结构来管理和使用多个变量。 结构是一种自定义的数据类型,可以由多个不同类型的变量组成。在STC15单片机中,结构的定义使用关键字struct。我们可以定义一个结构来表示一个包含多个变量的数据集合。 例如,我们可以定义一个包含温度、湿度和光照强度的结构,代码如下: ``` struct SensorData { int temperature; int humidity; int lightIntensity; }; ``` 这个结构包含三个整型变量,分别代表温度、湿度和光照强度。 我们可以使用结构类型来声明结构变量,如下所示: ``` struct SensorData data1; ``` 这样我们就创建了一个名为data1的结构变量。我们可以通过点操作符来访问结构变量中的成员变量,如下所示: ``` data1.temperature = 25; data1.humidity = 60; data1.lightIntensity = 200; ``` 这样我们就可以给结构变量中的每个成员变量赋值了。 结构的用法在STC15单片机的编程中非常方便,可以帮助我们更好地组织和管理数据。我们可以定义不同类型的结构来表示不同的数据集合,并通过结构变量来访问和操作这些数据。这在很多应用中都非常实用,比如传感器数据采集和处理、通讯协议解析等。 总之,STC15单片机的结构用法可以让我们更好地管理和利用多个变量,提高编程效率和代码可读性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值