实验10结构体及共用体

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

实验十结构体与共用体

实验目的:

1.结构体类型变量的定义和引用

2.结构体类型数组的概念和引用

3.指向结构体类型的指针的引用

4.共用体的定义及引用

5.链表的概念,会实现链表的创建

实验相关内容简介:

实结构体是个能够包含不同数据类型的一个结构,是一种能够自己定义的数据类型,通常可用来定义表示整体信息的一条记录。

1.结构体类型定义

struct 结构类型名

{ 数据类型数据项1;

数据类型数据项2;

……

数据类型数据项n;

}; //注意此处定义时分号不能少

其中的结构类型名表明了一种新的构造数据类型,其中的数据项称为结构体的数据成员。

2.结构体变量定义

结构体变量定义的形式通常有如下三种方法:

(1)先定义结构体类型,再定义结构体类型变量:

struct date

{ int day;

int month;

int year;

};

struct date time1,time2;

(2)定义结构体类型同时定义结构体类型变量:

struct stu

{long int num;

char name[20];

char sex;

float score;

struct date time1; //此处结构的成员也是个结构体

}stu1,stu2;

(3)直接定义结构体类型变量:

struct

{char name[20]; / *通讯录姓名* /

char sex; / *性别* /

long telephone; / *电话* /

char address; / *住址* /

} person1,person2; / *定义该结构体类型变量* /

该定义方法由于无法记录该结构体类型,所以除直接定义外,不能再定义该结构体类型变量。

3.结构体变量成员的引用

结构体变量的成员引用形式为:结构体变量名.成员名

如time1.year=1980;是给结构体变量time1中的year变量赋上年份值;stu1.time1.year=1985;则是给student中time1成员中的year成员赋值,4.结构体数组的定义

struct 结构体类型名结构体变量名[数组长度];

如:struct stu std[3];则std是一个包含3个结构体的结构体数组。

5.结构体类型的指针

(1)指向结构体变量的指针

struct stu stu1,*p;

p=&stu1; 此处将结构体stu1的地址赋给了p,p成为了指向结构体stu1的指针变量。

(2)指向结构体类型的指针引用

引用形式:指针变量->成员名

如p->num=10 //此表达式的效果相当于stu1.num=10;

(3) 指向结构体数组的指针

struct stu stu1[3],*p;

p=stu1; //此处变量名前不需加取址符号,因stu1本身就代表一个地址

(4)指向结构体数组的指针引用

引用方式较为灵活:①指针变量[下标].成员名如:p[i].num

②(指针变量+i)->成员名

#include "stdio.h"

struct stu

{long int num;

char name[20];

char sex;

float score;

}stu1[3],*p;

main()

{int i;

p=stu1;

i=2;

p[2].num=15; //利用数组下标方法给结构体成员赋值

(p+3)->num=20; //利用结构体指针为结构体成员赋值

printf("%d %d",stu1[2].num,stu1[3].num);

}

6.共用体类型

union 共用体类型名

{ 数据类型 数据项1;

数据类型 数据项2;

… …

数据类型 数据项n ;

}; //注意此处定义时分号不能少

共用体又称为联合体,它和结构体的不同之处是,联合体的所有成员占用一个公共的空间,而共用体所占的空间应该是各个成员存储空间之和。

union stu

{long int num; //4字节

char name[20]; //20字节

char sex; //1字节

float score; //4字节

}

联合体stu 所占的空间是20字节。

7.链表处理-结构指针的应用

链表是一种常见的重要的数据结构,采用动态的分配方法为一个结构体分配内存空间,可使用malloc 函数分配。构成链表的每一个结构体被称为结点。

在动态分配时,每个结点可以是不连续的(每个结点内是连续的),结点间的联系通过指针来实现,即在结点结构中定义一个成员项用来存放下一结点的首地址,这个用于存放地址的成员,常称为指针域。可在第一个结点的指针域存放第二个结点的首地址,如此串下去直到最后一个结点。最后一个结点因无后续连接,其指针域可赋为NULL,此种连接方式,如同一条环接一环的链子,在数据结构中称之为“链表”,如图8.1。

图8.1 简单的单项链表示意图

实验内容及步骤

【例8.1】结构体变量的定义及使用

定义一个结构变量student ,用于存储和显示一个学生的基本情况。程序如下:

#include "stdio.h"

相关文档
最新文档