还剩3页未读,继续阅读
文本内容:
第章结构体与共用体12第一单元学习指南本章教学目标掌握结构体类型与结构体变量的定义、结构体变量成员的引用与操作以及结构体数组和
1.结构体指针的定义与使用,了解共用体类型和共用体变量的定义与使用学会用结构体变量或结构体数组存储相关联的一组数据或多组数据;学会编写中低难度
2.的结构体应用程序,并能上机调试运行学习方法建议仔细阅读本章示例程序,正确理解每条语句的功能,着重理解结构体成员和结构体数组L元素的成员的引用方式注意区分结构体成员与标量类型变量或数组引用方式的不同着手编写中低难度的结构体应用程序上机调试运行本章示例程序,并调试运行自己编写的程序,进一步体会何时用普通形参
3.传递数据、何时用指针形参传递数据对于语法错误,采取与前面相同的应对措施着重检查是否误用将结构体类型标识符用
4.作结构体类型说明符,结构体成员和结构体数组元素的成员的引用方式是否正确,是否误对结构体的数组成员的数组名进行赋值对于逻辑错误,着重检查通过结构体指针间接引用结构体成员时,是否将这种
5.*p.age形式误写为*p.age仍然可以采用在程序中添加临时性输出语句的方法,进行出错位置的定位记录总结在调试程序的过程中发现的错误以及改正的方法,不断积累编写结构体应用程
6.序的直接经验第二单元重点与难点解析结构体类型与结构体变量有什么区别?
1.【解析】结构体类型与结构体变量是两个不同的概念,结构体类型是一种数据类型,其作用是规定该类型数据的性质与该类型数据在内存中的组织形式结构体类型只是一种数据类型的结构描述,并不占用内存空间而结构体变量依据数据类型的不同在内存中被分配相应大小的存储空间如何使用指向结构体的指针?
2.【解析】若定义一个结构体变量和一个同类型的指针变量,将变量存储区的地址赋给指针变P量,则指针指向此结构体变量,称为结构体指针P p定义结构体指针的方法与普通指针变量的方法一样,只是数据类型为结构体类型例如:struct studentstu;struct student*p=stu;结构体指针指向了结构体变量p StUo当结构体指针指向结构体变量后,引用结构体成员的方法有三种
(1)结构体变量名.成员名如stu.age
(2)(结构体指针变量名).成员名如()**p.age
(3)结构体指针变量名-成员名如p-age_如何使用指向结构体数组的指针?
3.【解析】与其他类型数组一样,可以使用指针指向一个结构体数组的元素若定义同类型结构体数组和指针变量,将数组元素的地址赋给指针变量,则指针变量指向此数组元素例如structstudent stu
[10],*pl,*p2;pl=stu;p2=stu[l];则指针指向数组元素指针指向数组元素pl stu
[0],p2stu[l]o通过指针引用结构体数组元素成员的方法与通过指针引用结构体变量成员的方法相同,如pl-age=18;()*p
2.age=19;上述语句的作用是对所指向的数组元素的成员进行赋值,对所指向的数pl stu
[0]age p2组元素的成员进行赋值stu[l]age运算符的优先级
4.【解析】当与运算合用时,由于的优先级低于因此若使用指针变量访问其指向的结构体变量中的某成员时,必须添加圆括号例如()*P.age也可以使用语言提供的更精炼的表达方法Cp-age与都是语言中优先级最高的运算符c结构体与共用体有何异同?
5.【解析】分析以下结构体与共用体的异同结构体定义struct date{char ch;int i;float f;}a;共用体定义union date{char ch;int i;float f;}b;相同点
(1)结构体和共用体的定义形式相似,都由若干成员组成
(2)结构体变量和共用体变量一般不能引用整个变量,只能引用变量中的某个成员例如:b.i=10;不同点结构体变量中的每个成员分别占用独立的存储空间,所以结构体变量所占存储空间为其各成员所占用内存字节数之和共用体变量中的所有成员遵循“分时复用”的原则,重叠占用同一段存储空间;所以共用体变量所占用的内存空间,就是其最长的成员所占用的内存字节数使用定义数据类型的别名有什么优势?
6.typedef【解析】在语言中定义的结构体、共用体和枚举等类型标识符不能单独使用,必须在用户自C定义的类型标识符之前添加相应的关键字,才能作为类型说明符使用例如struct student{char name
[20];int age;char sex
[3];);struct studentstul;其中的是用户自定义类型说明符用户可以使用为已经存在的数据struct studenttypedef类型定义一个别名例如typedef structstudent STU;或者typedef structstudent{char name
[20];int age;char sex
[3];}STU;此例中,被定义为结构体类型,之后即可以直接用定义结构体变量STU structstudent STU例如STU stul;可见,使用定义新的类型名来代替原有的类型名,往往可以简化程序中变量的类typedef型定义,增强程序的可读性为什么要使用动态方式分配内存?
7.此前,在存储大量的同类型数据时,通常使用数组(包括结构体数组)即使是变长数组,一经分配内存其存储空间的大小是固定不变的有时候,程序所需要的内存大小是动态变化的,若采用静态内存分配的方法,将会存在如下问题要么分配空间太大,造成内存空间的浪费;要么分配空间不足,则会引起数组下标越界的错误动态内存分配,是指在程序执行过程中动态地分配或者回收的内存分配方法动态内存分配相较于数组等静态内存分配,具有以下特点
(1)不需要预先分配存储空间
(2)分配的内存空间数量,可以在程序执行过程中根据需要扩大或者缩小总之,使用动态内存分配,可以更有效地利用内存空间第三单元典型错误解析直接给结构体变量赋值
1.结构体变量可以用初始化的形式赋值(在定义的同时赋初值)而结构体变量•旦定义完成,则不能再将一组值赋给一个结构体变量例如struct STU{char num
[10];char name
[10];float score;}sl,s2;「李飞,sl={“0712109999””569};是错误的正确的写法应该是struct STU{char num
[10];char name
[10];float score;,李飞,}sl={”0712109999“““569},s2;也可以写作struct STU{char num
[10];char name
[10];float score;}sl,s2;strcpysi.num,”0712109999”;“李飞”;strcpy si.name,51,score=569;结构体成员引用错误
2.必须通过结构体变量来引用其成员,而不能单独引用结构体成员例如:struct STU{char num
[10];char name
[10];float score;}sl,s2;score=569;是错误的正确的写法应该是51,score=569;又例如struct STU{char num
[10];char name
[10];float score;}si,s2;STU,score=569;也是错误的,因为为结构体类型名正确的写法应该是STU52,score=569;结构体的字符型数组成员赋值错误
3.若结构体的成员为字符型数组,则不能直接赋值,而必须使用专门的字符串处理函数赋值例如struct STU{char num
[10];char name
[10];float score;}sl,s2;”李飞”;si.name=是错误的正确的写法应该是“李飞”;strcpy si.name,结构体变量间接引用错误
4.间接引用结构体变量的成员时,要特别注意运算符的优先级例如struct STU{char num
[10];char name
[10];float score;}s,*p;p=s;*p.score=569;是错误的,因为运算符的优先级高于“*”运算符,故*等价于正确的写法应p.score*p.score该是*p.score=569;也可以写作p-score=569;。
个人认证
优秀文档
获得点赞 0