资源描述:
《幻灯片-C语言程序设计视频教程-第11章》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、C程序设计讲师:刘楠Email:lliunan@126.com第11章结构体与共用体11.1概述迄今为止,已介绍了基本类型(或称简单类型)的变量(如整型、实型、字符型变量等),也介绍了一种构造类型数据--数组,数组中的各元素是属于同一个类型的。但是只有这些数据类型是不够的。有时需要将不同类型的数据组合成一个有机的整体,以便于引用。这些组合在一个整体中的数据是相互联系的。应当把它们组织成一个组合项,在一个组合项中包含若干个类型不同的数据项(当然也可以相同)。C语言允许用户自己指定这样一种数据结构,它称为结构体。它相当于其他高级语言中的“记录”。numname
2、sexagescoreaddrstructstudent{intnum;charname[20];charsex;intage;floatscore;charaddr[30];}10010LiFunM1887.5Beijing声明一个结构体类型的一般形式为struct结构体名{成员表列;};“结构体名”用作结构体类型的标志,它又称“结构体标记”。大括弧内是该结构体中的各个成员,由它们组成一个结构体。对各成员都应进行类型声明,即类型名成员名;也可以把“成员表列”称为“域表”。每一个成员也称为结构体中的一个域。成员名定名规则与变量名相同。11.2定义结构体类型
3、变量的方法前面只是指定了一个结构体类型,它相当于一个模型,但其中并无具体数据,系统对之也不分配实际内存单元。为了能在程序中使用结构体类型的数据,应当定义结构体类型的变量,并在其中存放具体的数据。可以采取以下三种方法定义结构体类型变量。1、先声明结构体类型再定义变量名2、在声明类型的同时定义变量3、直接定义结构体类型变量关于结构体类型,有几点要说明:(1)类型与变量是不同的概念,不要混同。只能对变量赋值、存取或运算,而不能对一个类型赋值、存取或运算。在编译时,对类型是不分配空间的,只对变量分配空间。(2)对结构体中的成员(即“域”),可以单独使用,它的作用与
4、地位相当于普通变量。(3)成员也可以是一个结构体变量。(4)成员名可以与程序中的变量名相同,二者不代表同一对象。11.3结构体变量的引用在定义了结构体变量以后,当然可以引用这个变量。但应遵守以下规则:(1)不能将一个结构体变量作为一个整体进行输入和输出。(2)如果成员本身又属一个结构体类型,则要用若干个成员运算符,一级一级地找到最低的一级的成员。只能对最低级的成员进行赋值或存取以及运算。(3)对结构体变量的成员可以像普通变量一样进行各种运算(根据其类型决定可以进行的运算)。(4)可以引用结构体变量成员的地址,也可以引用结构体变量的地址。11.4结构体变量的
5、初始化和其他类型变量一样,对结构体变量可以在定义时指定初始值。[例11.1]对结构体变量初始化#include"stdafx.h"intmain(intargc,char*argv[]){structstudent{longintnum;charname[20];charsex;charaddr[20];}a={89031,"LiLin",'M',"123BeijingRoad"};printf("num:%ldname:%ssex:%caddr:%s",a.num,a.name,a.sex,a.addr);return0;}11.5结构体
6、数组一个结构体变量中可以存放一组数据(如一个学生的学号、姓名、成绩等数据)。如果有10个学生的数据需要参加运算,显然应该用数组,这就是结构体数组。结构体数组与以前介绍过的数值型数组不同之处在于每个数组元素都是一个结构体类型的数据,它们都分别包括各个成员(分量)项。11.5.1定义结构体数组和定义结构体变量的方法相仿,只需说明其为数组即可。11.5.2结构体数组的初始化与其他类型的数组一样,对结构体数组可以初始化。11.5.3结构体数组应用举例[例11.2]对候选人得票的统计程序。设有3个候选人,每次输入一个得票的候选人的名字,要求最后输出各人得票结果#in
7、clude"stdafx.h"#includestructperson{charname[20];intcount;};intmain(intargc,char*argv[]){structpersonleader[3]={{"Li",0},{"Zhang",0},{"Fun",0}};charname[20];for(inti=0;i<10;i++){scanf("%s",name);for(intj=0;j<3;j++)if(strcmp(name,leader[j].name)==0)leader[j].count++;}for(
8、i=0;i<3;i++){printf("name=%s",l