第10章结构、联合与枚举类型
合集下载
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
printf ("Enter today date(YYYY/MM/DD):");
scanf("%d/%d/%d", &today.year,
&today.month,
&today.day);
printf("Today:%d/%d/%d\n",today.year,
today.month,today.day);
{"Yuan zhiping",'M',{1963,10,5}};
/* 说明结构变量fang、yuan,并初始化结构变量 */
第十章 结构、联合与枚举类型
第一节 结构类型
printf("name
sex birthday\n");
printf("-------------------------------\n");
第十章 结构、联合与枚举类型
第一节 结构类型
结构类型的引用说明
➢不能将一个结构变量作为一个整体直接访问。例如已定 义student1为结构变量并且已有值。不能这样引用:
printf(“%s,%c,%d,%d,%d\n”,student1);
➢如果成员本身又是一个结构类型,则要用若干个成员运 算符,一级一级地找到最低的一级的成员。只能对最低 级的成员进行赋值或存取等运算。例如,对上面定义的 结构变量student1,可以这样访问各个成员:
第十章
结构、联合 与枚举类型
第十章 结构、联合与枚举类型
第一节 结构类型 第二节 结构数组 第三节 结构指针 第四节 在函数之间传递结构 第五节 联合类型 第六节 枚举类型 第七节 用typedef定义类型 第八节 链表基础 第九节 举例
第十章 结构、联合与枚举类型
第一节 结构类型
一、结构类型的概念
fang.birthday.month, fang.birthday.day);
printf("%-14s %-4c%4d.%2d.%2d\n",
,yuan.sex,yuan.birthday.year,
例C10_y10u4an.birthday.month,yuan.birthday.day); }
第一节 结构类型
二、结构类型的定义
struct 结构体名 { 数据类型 成员名1;
数据类型 成员名2; ……
数据类型 成员名n; };
struct为关键字
结构体名是用户定 义的类型标识。
{ }中包围的是组成 该结构的成员。
成员的数据类型既可以是简单的数据类型(int、char、 float、double...),也可以是复杂的数据类型(数组类 型和结构类型)。
比较简单数据类型时的变量说明语句: int i;
第十章 结构、联合与枚举类型
第一节 结构类型
结构定义实例
➢为了描述日期可以定义如下结构:
struct date
{ int year;
/* 年 结构成员的 */
int month; int day;
/* 月 数据类型是 */ /* 日 整型 */
};
➢为了处理通信录,可以定义如下结构:
第十章 结构、联合与枚举类型
第二节 结构数组
访问结构数组元素成员 必须遵守数组使用和访问结构成员的规定。 ➢访问数组元素 按下标进行访问。 ➢访问数组元素的成员,使用“.”运算符和成员名。
例如:要将数组man中的 3号元素赋值为: "Fangjin",'M',1963,9,13,
就可以使用下列语句: strcpy( man[3].name, "Fangjin” ); man[3].sex='M'; man[3].birthday.year=1963; man[3].birthday.month=9; man[3].birthday.day=13;
第十章 结构、联合与枚举类型
第一节 结构类型
➢可以引用成员的地址,也可以引用结构变量的 地址。如:
scanf(“%d”,&student1.num); printf(“%p”,&student1); 但不能用以下语句整体读入结构变量,如:
scanf(“%d,%s,%c,%d,%d,%d,%s”,&stude nt1);
/* 为嵌套定义的结构中的成员赋值 */
第十章 结构、联合与枚举类型
第一节 结构类型
➢如果要将“zhang”改为“zhong”,只要将结构变 量man中的数组成员name下标为2的元素‘a’改为 ‘o’即可。可以使用下列语句:
[2]='o';
/* 为结构变量中的数组成员的一个元素赋值 */
printf("%-14s %-4c%4d.%2d.%2d\n",
, xu.sex,xu.birthday.year,
xu.birthday.month, xu.birthday.day);
printf("%-14s %-4c%4d.%2d.%2d\n",
,fang.sex,fang.birthday.year,
today.month = 10;
today.day = 1;
➢指明结构成员的符号“.”是运算符,含义是访 问结构中的成员。“.”操作的优先级在C语言 中是最高的。其结合性为从左到右。
第十章 结构、联合与枚举类型
第一节 结构类型
例:用结构描述一个人的基本情况,可以定义如下结构: struct person /* 定义person结构类型 */ { char name[30]; char sex; struct date birthday; /* 结构的嵌套定义 */ } man;
说明: { }中的初始化数据用逗号分隔。注意数据的个数、 数据类型、顺序要一一对应。
第十章 结构、联合与枚举类型
第一节 结构类型
例:用结构描述个人基本情况,打印个人档案。
struct date
/* 在所有函数的外部定义结构date */
{ int year, month, day;};
struct person /* 在所有函数的外部定义结构person */
第十章 结构、联合与枚举类型
第一节 结构类型
➢输入zhang先生的情况,可用如下语句: strcpy(,“zhang”); /* 注意:不能写成="zhang";
*/ man.sex = ’M’; /* 为结构中的字符成员赋值 */
man.birthday.year = 1960; man.birthday.month = 3; man.birthday.day = 28;
✓在定义结构变量时一般先定义一个结构 类型,然后 定义变量为该类型。
✓只能对变量赋值、存取或运算,而不能 对一个类型赋值、存取或运算。
✓在编译时,对类型是不分配空间的,只 对变量分配空间。
➢对结构中的成员,可以单独使用,它的作 用与地位相当于普通变量。
➢成员也可以是结构变量。
➢成员名可以与程序中的变量名相同时,二 者不代表同一对象。
第十章 结构、联合与枚举类型
第二节 结构数组
将“Fangjin”改为“Fangjun”,修改其中的字母'i': man[3].name[5]='u';
/*为数组中元素的数组成员中的一个字符赋值*/
注意结构数组遵循数组的性质
➢数组元素的起始下标从0开始,
➢数组名表示该结构数组的存储首地址。
第十章 结构、联合与枚举类型
第一节 结构类型
例:输入今天的日期,然后输出该日期。 #include <stdio.h>
例C10_103
main( )
{ struct date /* 在函数中定义结构类型date */
{ int year, month, day;
};
struct date today; /* 说明结构变量today */
第十章 结构、联合与枚举类型
第二节 结构数组
结构体数组说明语句的格式 struct 结构体名 标识符[数组长度]
对结构体数组的认识 ➢是一个数组。 ➢数组中的每一个元素的数据类型是结构类型。
例:为记录100个人的基本情况。可以说明一个有100个 元素的数组。数组元素的基类型为结构。 struct person man[100]; man就是有100个元素的结构数组,数组的每个元 素为 person 型。
第十章 结构、联合与枚举类型
在定义结构时说明结构变量 ➢例如:struct student { int num; char name[20]; char sex; int age; char addr[30]; }student1,student2;
直接说明结构变量 ➢例如:struct { char name[20]; char addr[30]; }zhang;
第一节 结构类型
第十章 结构、联合与枚举类型
第十章 结构、联合与枚举类型
第一节 结构类型
四、引用结构变量的成员
➢访问结构中的成员是通过成员的名字,称为 “按名引用”。在程序中使用结构中成员的方 法为:
结构变量名.成员名称
例:将“92.10.01”送入today,对其各个 成员分别赋值:
today.year = 92;
student1.sex student1.birthday.month student1.birthday.day student1.birthday.year
第十章 结构、联合与枚举类型
第一节 结构类型
➢对成员变量可以象普通变量一样进行各种运算。
student2.birthday.year=student1.birthday.year; sum = student1.birthday.month + 12; student1.age++; ++student1.age;
第十章 结构、联合与枚举类型
五、对结构变量的整体操作
第一节 结构类型
要对结构进行整体操作有很多限制,C语言中 能够对结构进行整体操作的运算不多,只有赋值 “=”和取地址“&”操作。 例如:有 struct date sunday, today; 如果today被赋值后,可用语句
sunday=today; 为sunday赋值。
}
第十章 结构、联合与枚举类型
第一节 结构类型
六、结构变量的初始化
对结构变量进行初始化 在说明变量的同时,可以对每个成员置初值,称为结 构变量的初始化,其一般形式为: ➢定义结构时说明变量 struct 结构体名 { …… }结构变量={始化数据 };
struct date today;
说明多个address型的结构变量:
struct address wang, li, zhang;
结构变量同样有存储类型,存储特性与一般变量完 全相同。
第十章 结构、联合与枚举类型
第十章 结构、联合与枚举类型
第一节 结构类型
关于结构类型的说明
➢类型与变量是不同的概念。
struct address
{ char name[30]; /* 姓名。字符数组 */
char street[40]; /* 街道名称 */
char city[20]; /* 城市
*/
char state[2]; /* 省市代码 */
unsigned long zip; /* 邮政编码。 */
};
第十章 结构、联合与枚举类型
第一节 结构类型
三、结构变量的说明
在定义了某种类型的结构体后,就可以使用该类型 的结构变量。
用类型说明语句说明结构变量
struct 结构体名 结构变量名;
系统为所说明的结构变量按照结构定义时说明的组 成(成员分量),分配存储数据的实际内存单元。
例:将变量today说明为date型的结构变量:
{ char name[14], sex;
struct date birthday;
};
struct person xu={ "Xu lihui", 'M',{1962,10,4}};
main( )
{ struct person fang=
{"Fang jin",'M',{1963,9,13}};
struct person yuan=
问题的引出 用学号、姓名、性别、年龄、住址等属性来描
述一个学生。 int num; char name[20]; char sex; int age; char addr[30];
问题一:在程序中这些变量没有的内在联系。 问题二:如果有很多的学生,就可能造成混乱。
第十章 结构、联合与枚举类型
第十章 结构、联合与枚举类型