精品-清华大学C语言课件 第12章01 结构体的定义和使用

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

初始化结构体变量
结构体类型和其他的基本类型一样,也可以在定义结构体变量时指定初始值。例如:
struct Student { char cName[20]; char cSex; int iGrade; } student1={"HanXue","W",3};/*定义变量并设置初始值*/
注意: 在初始化时,定义的变量后面使用等号,然后将其初始化的值放在大括号中,并且每一个数据要
这种赋值方法是错误的。
Thank you
结构体变量的定义必须放在结构体类型定义之后,而且关键字struct必须与结构体名一起使用才能 定义该结构体类型的变量。
变量定义为基本的数据类型不同于定义为结构体类型。如,定义为基本的数据类型,只需要指定 int类型即可。而如果要定义为结构体类型,就可以定义出许多种基本数据类型。 说明:
在定义结构体变量后,系统就会为其分配内存单元。内存大小是这样计算的,例如product1和 product2在内存中各占个84字节(10+20+10+20+4+20)。
return 0; }
运行程序,显示效果如图12.3所示: 图12.3 引用结构体变量
实例2 显示学生信息
利用结构体保存学生信息并输出显示。在本实例中,使用两种方式向结构体中录入学生信息,一种是 在声明结构的同时,定义变量并初始化,另一种是在声明结构之后,定义变量并初始化。
#include<stdio.h> struct Student/*学生结构*/ { char cName[20];/*姓名*/ char cSex[3];/*性别*/ int iGrade;/*年级*/ } student1={"王红玉","男",3};/*定义变量并设置初始值*/
上面的代码使用关键字struct声明一个名为Product的结构类型,在结构体中定义的变量是Product结 构的成员,这些变量表示产品名称、形状、颜色、功能、价格和产地,可以看到根据结构成员中不同的作 用选择与此相对应的类型。
注意: struct Product是一个类型名,它和系统中提供的标准的数据类型具有同样的地位和作用。都是可以用
引用结构体成员
定义结构体类型变量以后,当然可以引用这个变量。但是要注意的是不能直接将一个结构体变量作 为一个整体进行输入和输出。例如,不能将product1和product2进行这样的输出:
printf("%s%s%s%d%s",product1); printf("%s%s%s%d%s",product2);
不可以省略。
例如声明一个结构:
struct Product char cName[10];/*产品名称*/ char cShape[20];/*形状*/ char cColor[10];/*颜色*/ char cFunc[20];/*功能*/ int iPrice;/*价格*/ char cArea[20];/*产地*/
struct 结构体名 { 成员表列 };
其中,关键字struct表示声明结构,其后的结构体名标志着结构体的类型。大括号内是该结构体中的 各个成员,每个成员都需要进行类型说明,说明形式如下:
类型名 成员名;
注意: 在声明结构时,要注意大括号最后面有一个分号“;”,在编写时千万不要忘记。另外,关键字struct
与结构体的成员列表的顺序一样。
实例1 输出商品信息
在本实例中声明结构体类型表示商品,然后定义结构体变量,之后对变量中的成员进行赋值,最后 将结构体变量中保存的信息进行输出。代码如下:#include<stdio.h>
struct Product/*声明结构*/ { char cName[10];/*产品的名称*/ char cShape[20];/*形状*/ char cColor[10];/*颜色*/ int iPrice;/*价格*/ char cArea[20];/*产地*/ };
运行程序,显示效果如图12.4所示:
图12.4 结构体类型的初始化操作 注意:
需要注意的是,只有在初始化时才可以对结构体变量整体赋值,除此之外只能分别给每个成员赋值,但 不可以在结构体内部给结构体变量的每个成员赋值。 例如:
struct students { char cName[20]= "王红玉";/*将王红玉赋给cName[20]*/ char cSex[3]= "男";/*将男赋给cSex[3]*/ int iGrade=3;/*将3赋给iGrade*/ } student1;
声明一个时间的结构体类型,其中包括年、月、日。声明一个学生信息的结构类型,并且定义两个 结构体变量student1和student2。在struct student结构体类型中,可以看到有一个成员是表示学生的 出生日期,使用的是struct date结构体类型,结构如图12.2所示。
图12.2 struct student的存储结构
int main() { struct Student student2={"孙佳","女",3};/*定义变量并设置初始值*/
/*将第一个结构体中的数据输出*/ printf("第一个学生的信息:\n"); printf("姓名: %s\n",student1.cName); printf("性别: %s\n",student1.cSex); printf("年级: %d\n",student1.iGrade); /*将第二个结构体中的数据输出*/ printf("第二个学生的信息:\n"); printf("姓名: %s\n",student2.cName); printf("性别: %s\n",student2.cSex); printf("年级: %d\n",student2.iGrade); return 0; }
要对结构体变量进行赋值、存取或运算实质上就是对结构体成员的操作,结构变量成员的一般形式 是:
结构变量名.成员名 在引用结构的成员时,可以在结构的变量名的后面加上成员运算符“.”和成员的名字。例如:
product1.cName="Icebox"; product2.iPrice=2000;
上面的赋值语句就是对product1结构体变量中的成员cName和iPrice两个变量进行赋值。 但是如果成员本身又属于一个结构体类型,那应该怎么办呢?这时就要使用若干个成员运算符,一 级一级地找到最低一级的成员。只能对最低级的成员进行赋值或存取以及运算操作。例如对上面定义的 student1变量中的出生日期进行赋值:
结构体的定义和使用
本讲大纲
1.结构体类型的概念 2.定义结构体变量 3.引用结构体成员 百度文库.初始化结构体变量 实例1 输出商品信息 实例2 显示学生信息
结构体类型的概念
“结构体”是一种构造类型,它是由若干“成员”组成的。其中的每一个成员可以是一个基本数据 类型或者又是一个构造类型。既然结构体是一种新的类型,那么就需要先进行对其构造,这里称这种 操作为声明一个结构体。声明结构体的过程就好比生产商品的过程,只有商品生产出来才可以使用该 商品。
printf("请输入商品的颜色\n");/*信息提示*/ scanf("%s",&product1.cColor);/*输出结构成员*/
printf("请输入商品的价格\n");/*信息提示*/ scanf("%d",&product1.iPrice);
实例1 输出商品信息
printf("请输入商品的产地\n");/*信息提示*/ scanf("%s",&product1.cArea);/*输出结构成员*/
像上一节中声明的Product结构体类型就是先进行声明结构体类型,然后struct Product进行定义 结构体变量,例如:
struct Product product1; struct Product product2;
struct Product是结构体类型名,而product1和product2是结构体变量名。既然使用Product类型 定义变量,那么这两个变量就具有相同的结构。 注意:
int main() { struct Product product1;/*定义结构体变量*/
printf("请输入商品的名称\n");/*信息提示*/ scanf("%s",&product1.cName); /*输出结构成员*/
printf("请输入商品的形状\n");/*信息提示*/ scanf("%s",&product1.cShape);/*输出结构成员*/
假如在程序中就要使用“商品”这样一个类型。那么商品具有哪些特点呢?商品有产品名称、形 状、颜色、功能、价格和产地。那么这个类型就应该是这样,如图12.1所示:
图12.1 “商品”类型 通过图12.1可以看到,商品这种类型并不能使用之前学习过任何一种类型所表示,这个时候就要 自己定义一种新的类型,将这种自己指定的结构称为结构体。 声明结构时使用的关键字是struct,在声明一种结构体的一般形式为:
来定义变量类型的,只不过结构体类型需要由用户自己定义而已。
定义结构体变量
在上一节中介绍了一个结构体的类型,这个类型就相当于一个模型,在这个模型中并没有具体的 数据,编译器也并不为其分配实际的内存单元。结构体类型定义以后就可以使用它,下面介绍三种定 义结构体类型变量的方法。 声明结构体类型,再定义变量
printf("名称: %s\n",product1.cName);/*将成员变量输出*/ printf("形状: %s\n",product1.cShape); printf("颜色: %s\n",product1.cColor); printf("价格: %d\n",product1.iPrice); printf("产地: %s\n",product1.cArea);
student1.birthday.year=1986; student1.birthday.month=12; student1.birthday.day=6;
说明: 不能使用student1.birthday来访问student1变量中的成员birthday,需要逐级找到最低级的成员。
因为birthday本身是一个结构体变量。
相关文档
最新文档