(补充)结构体

上传人:腾**** 文档编号:51273774 上传时间:2018-08-13 格式:PPT 页数:23 大小:297.50KB
返回 下载 相关 举报
(补充)结构体_第1页
第1页 / 共23页
(补充)结构体_第2页
第2页 / 共23页
(补充)结构体_第3页
第3页 / 共23页
(补充)结构体_第4页
第4页 / 共23页
(补充)结构体_第5页
第5页 / 共23页
点击查看更多>>
资源描述

《(补充)结构体》由会员分享,可在线阅读,更多相关《(补充)结构体(23页珍藏版)》请在金锄头文库上搜索。

1、19.1结构体问题我们要处理一个学生的信息,包括:学号、姓名、性别、年龄、成绩、地址学号、姓名、性别、年龄、成绩、地址按照以往定义变量的方式,我们可以这样定义:int num;int num; char name20;char name20; char sex;char sex; int age;int age; float score;float score; char addr50;char addr50;这些变量相互独立, 很难反映出它们的内在联系struct studentstruct student ;结构体结构体29.1.1结构类型 【例9-1】平面上点(x,y)的表示分析:如果用

2、两个独立的实型变量来表示两个坐标值,并 不能反映它们同属于一个坐标点的内在联系。我们可以自 己构造一个点的结构体类型,如下定义 struct point float x; /*横坐标标*/float y; /*纵坐标*/ ;(4,3)(0,0)平面上的点关键字结构体名结构体成员不能 省略3定义一个结构体的一般形式为:struct 结构名数据类型 成员1; 数据类型 成员 n; ;注意:1.结构体类型不分配空间,是一种数据类型;2.结构体成员的类型可以不同49.1.2 结构变量定义 【例9-2】定义点结构变量并保存平面点(4,3)struct pointfloat x;float y;struc

3、t point point1;point1.x = 4;point1.y = 3;5定义结构体变量的三种形式struct pointfloat x;float y;struct point point1, point2;形式1:先定义类型,再定义变量struct 结构名数据类型 成员1;数据类型 成员 n; ; struct 结构名 结构变量1,结构变量2;6形式2:在定义类型时定义变量struct 结构名数据类型 成员1;数据类型 成员 n; 结构变量1,结构变量2;struct pointfloat x;float y; point1,point2;7形式3:无类型名变量定义struct数

4、据类型 成员1;数据类型 成员 n; 结构变量1,结构变量2;struct float x;float y;point1,point2;注意:第三种定义形式省略了结构名,在此定义语句后面无法再定义这个类型的其它结构变量。89.1.3 结构变量使用【例9-3】结构变量初始化。#include main() struct student long int num; char name20; char addr20;a = 89031, “Li Lin“, “123 Beijing Road“;printf(“No.:%ldnname:%snaddress:%sn“,a.num,a.name,a.a

5、ddr); 初值表9初始化的一般形式struct 结构名 结构变量=初始数据;注意:1、在定义结构变量的时候对其进行初始化;2、初始化表由 括起;3、逗号隔开的数据对应赋值给结构变量的每个成员10【例】成员变量引用#include main() struct studentlong int num;char name20;char addr20;;struct student a;a.x = 89031;strcpy(a.name, “Li Lin“);strcpy( a.addr, “123 Beijing Road“);printf(“No.:%ldnname:%snaddress:%sn

6、“,a.num,a.name,a.addr);需要对每一个成员赋值需要输出每一个成员成员运算符11说明:1、结构体是一种构造型数据类型,在程序中使用结构 变量时,往往不把它作为一个整体来使用。在ANSI C中除了允许具有相同类型的结构变量相互赋值以外 ,一般对结构变量的使用,包括赋值、输入、输出 、运算等都是通过结构变量的成员来实现的。 2、引用成员变量的一般形式为:结构变量.成员名 “.”是结构成员运算符,连接结构变量名和成员名 ,它在所有的运算符中优先级最高。 3、结构成员可以参与各种合法运算12关键语法1、结构体类型定义只是描述了结构体的组织形式,并不为结 构体分配内存空间。 2、结构体

7、变量必须先定义,再使用。如:struct point p1; p1.x = 1; 3、使用结构体变量需要引用其成员。结构变量名.成员名 4、相同类型结构体变量赋值运算可以整体操作。如pt1,pt3是两个struct point类型的结构变量,我们可 以执行操作pt3 = pt1。13常见编程错误错例1struct stuint no;char name10;float score; = 1, “wangbin”, 98; 错误分析:struct stu是结构类型,不占内存空间,不能对其赋值。14错例2struct stu int no; char name10; float score; st

8、u s; 错误分析:1)结构体类型定义之后“”后必须加“;”2)结构体类型名为struct stu,不是stu;申明变量应为:struct stu s;15错例3struct stu int no; char name10; float score; ; struct stu s; scanf(“%d%s%f”,s); 错误分析:不能整体读入结构体变量值, 应为scanf(“%d%s%f”, char name10; float score; ; struct stu s, *p; scanf(“%d%s%f”, 错误分析:1) p是结构指针变量,使用之前应赋初值;2)p访问成员的方式应为p-

9、no,p-name, p-score;3)p-name为数组名,读入一个字符串时,前面不能加“float y;pos5;189.4 结构指针9.4.1 结构指针概念1、结构的指针变量struct point *pp;如果结构指针pp指向某个结构变量,*pp是pp所指 的结构变量,(*pp).x 即pp所指结构变量的成员x 。192、结构指针的使用方法 struct point origin,*pp; pp = origin.x = 36; (*pp).x = 36; pp-x = 36; 上面三条语句是等价的说明: 1、成员运算符“.”的优先级高于取目标运算符的优 先级,如果将(*pp).x写

10、成*pp.x是非法的 2、引用pp所指目标的成员,还可以表示为pp-x;“-”为取结构指针所指目标成员的运算符,优先级 与“.”相同20关键语法1、结构指针定义的一般形式为:struct 结构体名 *结构指针名;2、同其它指针变量一样,结构指针使用前必须初始化 ,否则将会是导致非法访问。3、结构指针引用成员的一般形式为:(*结构指针名).成员名 结构指针名-成员名两种形式功能一样,但一般使用后者。219.4.2 图书信息输出【例9-8】设图书信息包括:书号、书名、售空标志 、价格。写程序,输出某本图书信息。 #include #include struct book long num; /书号

11、 char name20; /书名 char marking; /售空标志 float price; /价格 22main()struct book boo_1, *p;p = boo_1.num = 89101;strcpy(boo_1.name, “math“);boo_1.marking = T;boo_1.price = 30;printf(“书号:%ldn书名:%sn售空:%cn书价:%fn“, boo_1.num, boo_1.name, boo_1.marking, boo_1.price);printf(“书号:%ldn书名:%sn售空:%cn书价:%fn“, (*p).num

12、, (*p).name, (*p).marking, (*p).price);printf(“书号:%ldn书名:%sn售空:%cn书价:%fn“,p-num, p-name, p-marking, p-price);运行结果: 书号:89101 书名:math 售空:T 书价:30.000000 书号:89101 书名:math 售空:T 书价:30.000000 书号:89101 书名:math 售空:T 书价:30.000000 Press any key to continue23小结本章结构体类型。主要内容有: (1) 结构体是一种用户自定义的构造类型,描述了不同类型变 量的组织形式,不能对其赋值;使用时需要定义结构体变量 ,只能给结构体变量赋值。结构体可以嵌套定义。 (2) 结构变量不能整体引用,只能引用单个成员变量。引用成 员变量的运算符是“.”或者“-”;前者是结构变量引用 成员,后者是结构指针变量引用成员。 (3) 结构类型描述了成员在内存中的组织形式,并不占内存空 间;结构变量分配内存单元,各成员都占用内存空间,成员 是同时存在的。结构变量的长度是所有成员长度之和。 (4) 结构变量和结构指针都可以作为函数参数,但结构变量作 为函数参数,需要将实参结构变量的每一个成员复制给形参 结构变量;而结构指针作函数参数时,只需要复制一个地址 ,因此,更加有效。

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 生活休闲 > 社会民生

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号