C语言自学经典教程
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
struct date { int year, month, day;}; struct student { char num[8], name[20], sex; struct date birthday; float score; }a;
19
访问其中的成员: a.birthday.year a.birthday.month a.birthday.day
2011-3-8
30个字节
10.1.2 结构体变量的定义与初始化
1. 结构体类型变量的定义 (2)在定义结构体类型的同时定义变量 struct 结构体名 { 成员定义表; 例如: }变量名表; struct student { char num[8],name[20],sex; int age; float score; }st[30]; //结构体数组
num name 8个字节
9
struct date sex 1个字节 { int year,month,day;}; year 2个字节 struct student { char num[8]; birthday month 2个字节 char name[30]; day 2个字节 char sex; addr 60个字节 struct date birthday; /* 成员为结构体类型 */ score 12个字节 char addr[60]; int score[6]; };
2011-3-8
10.1.2 结构体变量的定义与初始化
2. 结构体变量的初始化 【例10.4】结构体变量的初始化。 struct date { int year, month, day;}; struct student { char num[8], name[20来自百度文库, sex; struct date birthday; float score; }a={"9606011","Li ming",'M',{1977,12,9},83}, b={"9608025","Zhang liming",'F',{1978,5,10},87},c;
答案:11:helloworld
2011-3-8
10.1.2 结构体变量的定义与初始化
3. 结构体变量的运算 (3)对结构体变量进行取址运算
struct date { int year, month, day;}; struct student { char num[8], name[20], sex; struct date birthday; float score; }a;
2011-3-8
10.1.1 结构体与结构体类型的定义
10.1.1 结构体与结构体类型的定义例题 例如图书类型的定义: 例如学生类型的定义: struct bookcard struct student { char num[8]; /* 学号是字符数组类型 */ { char num[10]; /*图书分类编号是字符数组类型*/ char name[30]; /* 姓名是字符数组类型 */ char name[30]; /*书名是字符数组类型*/ char sex; /* 性别是字符型 */ char author[30]; /*作者是字符数组类型*/ int age; /* 年龄是整型 */ char publisher[60]; /*出版社是字符数组类型*/ char addr[60]; /* 住址是字符数组类型 */ float price; /*价格是单精度实型*/ int score[6]; /* 成绩是整型数组类型 */ }; int n; /*库存量是整型*/ 记住:这仅仅是一种类型定义。有类型才有变量。 };
说明:元素的个数可以省略,根据赋初值时结构体常量的个数 确定数组元素的个数
13
2011-3-8
10.1.2 结构体变量的定义与初始化
3. 结构体变量的运算 (1)用sizeof运算符计算结构体变量所占内存空间
struct date { int year, month, day;}; struct student { char num[8], name[20], sex; struct date birthday; float score; }a;
结构体变量之间进行赋值时,系统将按成员一一对应赋值。
15
2011-3-8
16
typedef struct { int x; char *s; }data; data st; void func(data w) { w.x=56; w.s="okokok"; }
void main() { st.x=11; st.s="helloworld"; func(st); printf("%d:%s",st.x,st.s); }
答案:16
20
2011-3-8
10.1.2 结构体变量的定义与初始化
10.1.2 结构体变量的定义与初始化
21
例题:若有以下的结构体说明,请完成对数组stu的定 义,stu数组为struct student类型,共有10个元素。 Struct student { int nm; char name; float score; }; Stu 数组定义为 ( struct student stu[10]; );
10
2011-3-8
10.1.2 结构体变量的定义与初始化
1. 结构体类型变量的定义 (3)直接定义结构体类型变量 struct { 成员定义表; }变量名表;
11
例如: struct { char num[8],name[20],sex; int age; float score; }st[30], a, b, c;
2011-3-8
10.1.2 结构体变量的定义与初始化
4. 结构体变量成员的引用例题 【例9.6】以下程序运行结果为()。 struct S { int a,b,c; }; void main() { struct S m= {1,2,3},n= {6,5,4}; printf(“%d”, m.a*n.a+m.b*n.b ); }
成员也可以是结构变量。 对结构中的成员,可以单独使用,它的作用与地 位相当于普通变量。 成员名可与程序中的变量名相同时,也可与不同 可与程序中的变量名相同时,也可与 结构体类型的成员名相同,二者代表不同的对 象。
2011-3-8
10.1.2 结构体变量的定义与初始化
结构体类型与变量的说明例题
4
2011-3-8
10.1.1 结构体与结构体类型的定义
结构体类型定义的一般形式: struct 结构体名 { 数据类型1 成员名1; 数据类型2 成员名2; …… 数据类型n 成员名n; }; 说明:
5
struct为关键字; 结构体名是用户定义 的类型标识。 { }中是组成该结构体 的成员。成员的数据 类型可以是C语言所允 许的任何数据类型。
7
2011-3-8
10.1.2 结构体变量的定义与初始化
结构体类型与变量的说明
8
类型与变量是不同的概念。
应先定义一个结构体类型,而后再定义结构体变量。 结构体类型 结构体变量 系统对类型不分配空间,仅对变量分配空间。 类型 变量 只能对变量赋值、存取或运算,而不能对一个类型赋 变量 类型 值、存取或运算。
2011-3-8
10.1.2 结构体变量的定义与初始化
10.1.2 结构体变量的定义与初始化例题
22
2011-3-8
10.1 结构体
10.1.3 结构体的指针 1. 结构体指针变量的定义
23
与普通的类型变量一样,结构体也可以定义指针类型。 结构体指针变量定义的一般形式: struct 结构体名 *指针变量名; 例如: struct student *p; struct date { int year, month, day; }*q;
14
8个字节 30个字节 1个字节 year 2个字节 birthday month 2个字节 day 2个字节 addr 60个字节 score 12个字节 num name sex
例如: sizeof(a) 的结果为8+20+1+6+4=39
sizeof(struct student) 的结果为39
2011-3-8
10.1 结构体
10.1.1 结构体与结构体类型的定义 结构体:一种构造类型数据,使用关键字Struct 结构体 结构体由若干不同类型的数据项组成, 构成结构体的各个数据项称为结构体成员。
如:学生的信息就可以使用下面的结构体来描述: struct student 结构体名 { int num; char name[20]; 类型名 char sex; int age; 成员名 char addr[30]; }
6
2011-3-8
10.1.2 结构体变量的定义与初始化
1. 结构体类型变量的定义 可以采取以下3种方法定义结构体类型变量 (1)利用已定义的结构体类型名定义变量 struct 结构体名 变量名表; 例如: struct student s[30], t1, t2; 按照结构体类型的组成,系统为定义的结构体变 量分配内存单元。结构体变量的各个成员在内存中占 用连续存储区域,结构体变量所占内存大小为结构体 中每个成员所占用内存的长度之和。
17
对结构体变量a进行 &a 运算,可以得到a的首地址(结构 体存储在连续的存储单元里),它是结构体类型指针。
2011-3-8
10.1.2 结构体变量的定义与初始化
4. 结构体变量成员的引用 结构体变量成员引用的一般形式: 结构体变量名.成员名
struct date { int year, month, day;}; struct student { char num[8], name[20], sex; struct date birthday; float score; }a;
1
C 语言程序设计
第10章 结构体与共用体
大连交通大学 软件学院 主讲教师:赵旭宝
第10章 结构体与共用体
2
10.1 10.2 10.3
结构体 共用体 枚举类型与类型命名
2011-3-8
10.1 结构体
10.1.1 结构体概述
3
问题定义:有时需要将不同类型的数据组合成一个有 机的整体,以便于引用。 如:一个学生有学号/姓名/性别/年龄/地址等属性。 一个学生有 一本图书的信息有图书编号、书名、作者、出版 一本图书的信息有 社、出版日期、价格。 问题:怎么描述这些信息呢? int num; char name[20]; char sex; int age; int char addr[30]; 这些变量是描述一个学生的 信息,所以应当把它们组织 成一个组合项,在一个组合 项中包含若干个类型不同的 数据项。称为结构体。
“.”是分量运 算符,运算级 别最高。
18
结构体变量a的各成 员可分别表示为 a.num、 a.name、 a.sex、 a.birthday、 a.score
2011-3-8
10.1.2 结构体变量的定义与初始化
4. 结构体变量成员的引用 如果成员本身又属一个结构体类型,则要用若干个成 员运算符,一级一级地找到最低的一级的成员。只 能对最低级的成员进行赋值或存取以及运算。
12
说明: 如果初值个数少于结构体成员个数,则将无初值的成员赋以0值。 如果初值个数多于结构体成员个数,则编译出错。
2011-3-8
10.1.2 结构体变量的定义与初始化
【例10.5】结构体数组的初始化。 struct s { char num[8],name[20],sex; float score; }stu[3]={{"9606011","Li ming",'M',87.5}, {"9606012","Zhang jiangguo",'M',79}, {"9606013","Wang ping",'F',90} };
2011-3-8
10.1.2 结构体变量的定义与初始化
3. 结构体变量的运算 (2)同类型结构体变量之间的赋值运算 struct date { int year, month, day;}; struct student { char num[8], name[20], sex; struct date birthday; float score; }a={"9606011","Liming",'M',{1977,12,9},83},b,c; c = a;
19
访问其中的成员: a.birthday.year a.birthday.month a.birthday.day
2011-3-8
30个字节
10.1.2 结构体变量的定义与初始化
1. 结构体类型变量的定义 (2)在定义结构体类型的同时定义变量 struct 结构体名 { 成员定义表; 例如: }变量名表; struct student { char num[8],name[20],sex; int age; float score; }st[30]; //结构体数组
num name 8个字节
9
struct date sex 1个字节 { int year,month,day;}; year 2个字节 struct student { char num[8]; birthday month 2个字节 char name[30]; day 2个字节 char sex; addr 60个字节 struct date birthday; /* 成员为结构体类型 */ score 12个字节 char addr[60]; int score[6]; };
2011-3-8
10.1.2 结构体变量的定义与初始化
2. 结构体变量的初始化 【例10.4】结构体变量的初始化。 struct date { int year, month, day;}; struct student { char num[8], name[20来自百度文库, sex; struct date birthday; float score; }a={"9606011","Li ming",'M',{1977,12,9},83}, b={"9608025","Zhang liming",'F',{1978,5,10},87},c;
答案:11:helloworld
2011-3-8
10.1.2 结构体变量的定义与初始化
3. 结构体变量的运算 (3)对结构体变量进行取址运算
struct date { int year, month, day;}; struct student { char num[8], name[20], sex; struct date birthday; float score; }a;
2011-3-8
10.1.1 结构体与结构体类型的定义
10.1.1 结构体与结构体类型的定义例题 例如图书类型的定义: 例如学生类型的定义: struct bookcard struct student { char num[8]; /* 学号是字符数组类型 */ { char num[10]; /*图书分类编号是字符数组类型*/ char name[30]; /* 姓名是字符数组类型 */ char name[30]; /*书名是字符数组类型*/ char sex; /* 性别是字符型 */ char author[30]; /*作者是字符数组类型*/ int age; /* 年龄是整型 */ char publisher[60]; /*出版社是字符数组类型*/ char addr[60]; /* 住址是字符数组类型 */ float price; /*价格是单精度实型*/ int score[6]; /* 成绩是整型数组类型 */ }; int n; /*库存量是整型*/ 记住:这仅仅是一种类型定义。有类型才有变量。 };
说明:元素的个数可以省略,根据赋初值时结构体常量的个数 确定数组元素的个数
13
2011-3-8
10.1.2 结构体变量的定义与初始化
3. 结构体变量的运算 (1)用sizeof运算符计算结构体变量所占内存空间
struct date { int year, month, day;}; struct student { char num[8], name[20], sex; struct date birthday; float score; }a;
结构体变量之间进行赋值时,系统将按成员一一对应赋值。
15
2011-3-8
16
typedef struct { int x; char *s; }data; data st; void func(data w) { w.x=56; w.s="okokok"; }
void main() { st.x=11; st.s="helloworld"; func(st); printf("%d:%s",st.x,st.s); }
答案:16
20
2011-3-8
10.1.2 结构体变量的定义与初始化
10.1.2 结构体变量的定义与初始化
21
例题:若有以下的结构体说明,请完成对数组stu的定 义,stu数组为struct student类型,共有10个元素。 Struct student { int nm; char name; float score; }; Stu 数组定义为 ( struct student stu[10]; );
10
2011-3-8
10.1.2 结构体变量的定义与初始化
1. 结构体类型变量的定义 (3)直接定义结构体类型变量 struct { 成员定义表; }变量名表;
11
例如: struct { char num[8],name[20],sex; int age; float score; }st[30], a, b, c;
2011-3-8
10.1.2 结构体变量的定义与初始化
4. 结构体变量成员的引用例题 【例9.6】以下程序运行结果为()。 struct S { int a,b,c; }; void main() { struct S m= {1,2,3},n= {6,5,4}; printf(“%d”, m.a*n.a+m.b*n.b ); }
成员也可以是结构变量。 对结构中的成员,可以单独使用,它的作用与地 位相当于普通变量。 成员名可与程序中的变量名相同时,也可与不同 可与程序中的变量名相同时,也可与 结构体类型的成员名相同,二者代表不同的对 象。
2011-3-8
10.1.2 结构体变量的定义与初始化
结构体类型与变量的说明例题
4
2011-3-8
10.1.1 结构体与结构体类型的定义
结构体类型定义的一般形式: struct 结构体名 { 数据类型1 成员名1; 数据类型2 成员名2; …… 数据类型n 成员名n; }; 说明:
5
struct为关键字; 结构体名是用户定义 的类型标识。 { }中是组成该结构体 的成员。成员的数据 类型可以是C语言所允 许的任何数据类型。
7
2011-3-8
10.1.2 结构体变量的定义与初始化
结构体类型与变量的说明
8
类型与变量是不同的概念。
应先定义一个结构体类型,而后再定义结构体变量。 结构体类型 结构体变量 系统对类型不分配空间,仅对变量分配空间。 类型 变量 只能对变量赋值、存取或运算,而不能对一个类型赋 变量 类型 值、存取或运算。
2011-3-8
10.1.2 结构体变量的定义与初始化
10.1.2 结构体变量的定义与初始化例题
22
2011-3-8
10.1 结构体
10.1.3 结构体的指针 1. 结构体指针变量的定义
23
与普通的类型变量一样,结构体也可以定义指针类型。 结构体指针变量定义的一般形式: struct 结构体名 *指针变量名; 例如: struct student *p; struct date { int year, month, day; }*q;
14
8个字节 30个字节 1个字节 year 2个字节 birthday month 2个字节 day 2个字节 addr 60个字节 score 12个字节 num name sex
例如: sizeof(a) 的结果为8+20+1+6+4=39
sizeof(struct student) 的结果为39
2011-3-8
10.1 结构体
10.1.1 结构体与结构体类型的定义 结构体:一种构造类型数据,使用关键字Struct 结构体 结构体由若干不同类型的数据项组成, 构成结构体的各个数据项称为结构体成员。
如:学生的信息就可以使用下面的结构体来描述: struct student 结构体名 { int num; char name[20]; 类型名 char sex; int age; 成员名 char addr[30]; }
6
2011-3-8
10.1.2 结构体变量的定义与初始化
1. 结构体类型变量的定义 可以采取以下3种方法定义结构体类型变量 (1)利用已定义的结构体类型名定义变量 struct 结构体名 变量名表; 例如: struct student s[30], t1, t2; 按照结构体类型的组成,系统为定义的结构体变 量分配内存单元。结构体变量的各个成员在内存中占 用连续存储区域,结构体变量所占内存大小为结构体 中每个成员所占用内存的长度之和。
17
对结构体变量a进行 &a 运算,可以得到a的首地址(结构 体存储在连续的存储单元里),它是结构体类型指针。
2011-3-8
10.1.2 结构体变量的定义与初始化
4. 结构体变量成员的引用 结构体变量成员引用的一般形式: 结构体变量名.成员名
struct date { int year, month, day;}; struct student { char num[8], name[20], sex; struct date birthday; float score; }a;
1
C 语言程序设计
第10章 结构体与共用体
大连交通大学 软件学院 主讲教师:赵旭宝
第10章 结构体与共用体
2
10.1 10.2 10.3
结构体 共用体 枚举类型与类型命名
2011-3-8
10.1 结构体
10.1.1 结构体概述
3
问题定义:有时需要将不同类型的数据组合成一个有 机的整体,以便于引用。 如:一个学生有学号/姓名/性别/年龄/地址等属性。 一个学生有 一本图书的信息有图书编号、书名、作者、出版 一本图书的信息有 社、出版日期、价格。 问题:怎么描述这些信息呢? int num; char name[20]; char sex; int age; int char addr[30]; 这些变量是描述一个学生的 信息,所以应当把它们组织 成一个组合项,在一个组合 项中包含若干个类型不同的 数据项。称为结构体。
“.”是分量运 算符,运算级 别最高。
18
结构体变量a的各成 员可分别表示为 a.num、 a.name、 a.sex、 a.birthday、 a.score
2011-3-8
10.1.2 结构体变量的定义与初始化
4. 结构体变量成员的引用 如果成员本身又属一个结构体类型,则要用若干个成 员运算符,一级一级地找到最低的一级的成员。只 能对最低级的成员进行赋值或存取以及运算。
12
说明: 如果初值个数少于结构体成员个数,则将无初值的成员赋以0值。 如果初值个数多于结构体成员个数,则编译出错。
2011-3-8
10.1.2 结构体变量的定义与初始化
【例10.5】结构体数组的初始化。 struct s { char num[8],name[20],sex; float score; }stu[3]={{"9606011","Li ming",'M',87.5}, {"9606012","Zhang jiangguo",'M',79}, {"9606013","Wang ping",'F',90} };
2011-3-8
10.1.2 结构体变量的定义与初始化
3. 结构体变量的运算 (2)同类型结构体变量之间的赋值运算 struct date { int year, month, day;}; struct student { char num[8], name[20], sex; struct date birthday; float score; }a={"9606011","Liming",'M',{1977,12,9},83},b,c; c = a;