《程序设计基础-C语言》第8章-结构体与共用体_第1页
《程序设计基础-C语言》第8章-结构体与共用体_第2页
《程序设计基础-C语言》第8章-结构体与共用体_第3页
《程序设计基础-C语言》第8章-结构体与共用体_第4页
《程序设计基础-C语言》第8章-结构体与共用体_第5页
已阅读5页,还剩23页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

structstd_info /*学生信息结构类型*/{charno[7];charname[9];charsex[3];

structdatebirthday;};structscore /*成绩结构类型*/{charno[7];

intscore1,score2,score3;};字符数组的长度=实际长度+1(存储结束标志)允许是已定义的另一个结构体类型1、结构体类型的定义

struct结构体类型名

{数据类型数据项1;

数据类型数据项2;

…………

数据类型数据项n;

};分号不能少!结构体类型关键字(1)“结构体类型名”和“数据项”的命名规则,与变量名相同。(2)相同数据类型的数据项,既可逐个、逐行分别定义,也可合并成一行定义。例如,[案例10.1]中的结构体类型date。

(3)结构体类型中的数据项,允许是已定义的另一个结构体类型。例如,[案例10.1]中、结构体类型std_info的数据项“birthday”。2、结构体变量的定义(1)间接定义──先定义类型、再定义变量例如,利用[案例10.1]中、结构体类型std_info,定义结构体变量student:

structstd_infostudent;则结构体变量student拥有结构体类型std_info的全部数据项。结构体类型名不可缺!下列写法是错误的:structstudent;(2)直接定义──定义类型的同时,定义变量

struct[结构类型名]{……}结构变量表;说明:结构类型中的数据项名(又称成员名),可以与程序中的变量同名。2*

结构体变量的引用与初始化[例2]利用[例1]中的结构体类型std_info,定义结构体变量student,用于存储和显示1个学生的信息。#include"struct.h"structstd_infostudent={"000102","张三","男",{1980,9,20}};#include"stdio.h"#include"conio.h"voidmain()

{printf("No:%s\n",student.no);printf("Name:%s\n",student.name);printf("Sex:%s\n",student.sex);printf("Birthday:%d-%d-%d\n",student.birthday.year,

student.birthday.month,student.birthday.day

);getch();}[例1]中定义的结构体类型成员运算符程序运行结果:

No:000102Name:张三

Sex:男

Birthday:1980-9-201、结构体变量成员的引用规则(1)基本类型:结构变量.成员例如,student.no,等。(2)

结构体类型:结构变量.成员[.成员……]例如:student.birthday.year student.birthday.month student.birthday.day

本身是结构类型,只能访问它的成员(3)最低1级成员,等价同类型的普通变量。(4)既可引用结构体变量成员的地址,也可引用结构变量的地址。例如,&student.name

,&student

。2、结构体变量的初始化结构体变量={初值表}与1维数组相似,但结构体类型成员的初值,是一个初值表。例如,structstd_infostudent={"000102","张三","男",{1980,9,20}}。注:初值的数据类型,应与结构变量中相应成员所要求的一致,否则会出错。[返回]3结构体数组

结构体数组的每一个元素,都是结构体类型数据,均包含结构体类型的所有成员。

[例3]利用structstd_info,定义一个结构体数组student[3],用于存储和显示3个学生的基本情况。#include"stdio.h"#include"conio.h"#include"struct.h"

structstd_infostudent[3]={{“000102”,“张三”,“男”,{1980,9,20}},

{“000105”,“李四”,“男”,{1980,8,15}},

{“000112”,“王五”,“女”,{1980,3,10}}};voidmain(){inti;/*打印表头:"□"表示1个空格字符*/printf("No.□□□□Name□□□□□Sex□Birthday\n"); for(i=0;i<3;i++){printf("%-7s",student[i].no);printf("%-9s",student[i].name);printf("%-4s",student[i].sex);printf("%d-%d-%d\n",student[i].birthday.year,

student[i].birthday.month, student[i].birthday.day);}getch();}思考:student[i].nostudent.no[i]?数组元素是结构变量程序运行结果:

No.NameSexBirthday000102张三男1980-9-20000105李四男1980-8-15000112王五女1980-3-101、结构体数组的定义与结构体变量的定义类似,可以直接或间接定义,只需说明为数组即可。2、结构体数组的初始化结构体数组[n]={{初值表1},{初值表2},...}思考:与2维数组初始化相似吗?[返回]4*

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

[例4]使用指向结构体变量的指针,访问其各个成员。#include"stdio.h"#include"conio.h"#include“struct.h”structstd_infostudent={“000102”,“张三”,“男”,{1980,9,20}};voidmain(){structstd_info

*p_std=&student;printf("No:%s\n",p_std->no);printf("Name:%s\n",p_std->name);printf("Sex:%s\n",p_std->sex);printf("Birthday:%d-%d-%d\n",p_std->birthday.year,

p_std->birthday.month, p_std->birthday.day);getch();}->:指向结构变量成员运算符如果指针变量pointer已指向结构体变量var,则以下三种形式等价:(1)var.成员(2)pointer->成员(3)(*pointer).成员思考:如果要求从键盘上输入student的各成员数据,如何修改程序?var只能是结构体变量名pointer只能是指针变量括号不能缺!……voidmain(){structstd_info

*p_std=&student;printf(“No=”);scanf(“%s”,p_std->no);…………printf("year=“);scanf(“%d”,&

p_std->birthday.year);…………}注:无论输入或输出,最低级成员的性质(变量/指针),决定输入项或输出项表达式的性质。取birthday.year的地址此处不能加&。为什么?(2)指向结构体数组的指针[例5]使用指向结构数组的指针来访问结构数组。#include"stdio.h"#include"conio.h"#include"struct.h"structstd_infostudent[3]={{"000102","张三","男",{1980,5,20}},{"000105","李四","男",{1980,8,15}},{“000112”,“王五”,“女”,{1980,3,10}}};voidmain(){structstd_info*p_std=student; inti=0;指向结构数组student的指针/*打印表头*/printf("No.□□□□Name□□□□□Sex□Birthday\n");/*输出*/for(;i<3;i++,p_std++){printf("%-7s%-9s%-4s%4d-%2d-%2d\n",p_std->no,p_std->name,p_std->sex,p_std->birthday.year,

p_std->birthday.month,p_std->birthday.day);}getch();}指向结构数组的下一个元素,而不是当前元素的下一个成员

(3)指向结构数据的指针作函数参数

[例6]编写显示函数display(),通过主函数调用来实现[例5]的显示。#include"stdio.h"#include"conio.h"#include"struct.h"structstd_infostudent[3]={{"000102","张三","男",{1980,5,20}},{"000105","李四","男",{1980,8,15}},{“000112”,“王五”,“女”,{1980,3,10}}};voiddisplay(structstd_info*p_std){printf("%-7s%-9s%-4s",p_std->no,p_std->name,p_std->sex);printf("%4d-%2d-%2d\n",p_std->birthday.year,p_std->birthday.month, p_std->birthday.day);}voidmain(){inti=0;printf("No.□□□□Name□□□□□Sex□Birthday\n");for(;i<3;i++){display(student+i); printf("\n");}getch();}[返回]8.4共同体类型1.共用体的概念、定义及其变量说明(1)共用体的概念

有时需要使几种不同类型的变量存放到同一段内存单元中。例如,可把一个整型变量、一个字符型变量、一个实型变量放在同一个地址开始的内存单元中。即使用覆盖技术,几个不同的变量共占同一段内存的结构,称为“共用体”类型的结构。说明:在结构体中各成员有各自的内存空间,一个结构体变量的总长度是各成员长度之和。而在“共用体”中,各成员共享一段内存空间,一个共用体变量的长度等于各成员中最长的长度。

2.结构类

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论