C语言12_StructuresandUnions_AdvancedConcepts.pptVIP

  1. 1、本文档共17页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
C语言12_StructuresandUnions_AdvancedConcepts

结构体与联合体:高级概念 吴清锋 2007年秋 提纲 指向结构体类型数据的指针 用指针处理链表 链表概述 简单链表(静态链表) 处理动态链表所需的函数 动态链表的处理 用typedef定义类型 运算符小结 指向结构体类型数据的指针(1) 概述 结构体变量的指针就是该变量所占据的内存段的起始地址。 可以定义一个指针变量来指向一个结构体变量。 指针变量可以用来指向结构体数组中的元素。 定义结构体指针变量的一般形式是(回顾下之前如何定义?) struct 结构体类型 * 结构体指针名 务必注意每一部分的含义 通过结构体指针变量访问相应结构体成员 (* 结构体指针名).分量 指向运算符- 优先级、结合性与.运算符相同 结构体指针名-分量 总结下三种访问成员的三种形式。尤其是,使用*和-的对象都是指针变量,但是书写上一定要注意差异! 例子(P289例11.3) 指向结构体类型数据的指针(2) 用结构体类型数据的指针来访问结构体数组。 例子P290例11.4,一定要注意p++的含义! p是一个指向结构体类型的指针变量,因此赋值的时候要门当户对!否则就要进行强制类型的转换! 函数参数问题—传递结构体入函数(注意门当户对!) 将结构体变量的各个分量分别对应一个参数传递; 将结构体变量整体作为实参进行传递;P292例11.5 将指向结构体变量的指针变量作为实参进行传递.P293 比较 (p++)-num P291 (++p)-num P291 ++(p-num) ++p-num P290 p-num++ P290 链表概述(1) 用数组存储一批数据时,必须事先定义固定的长度。当事先并不很确定时,就只能定义长度为足够大。这样很浪费空间。 数组之所以要事先定义固定的长度,目的是先分配好空间以为保证各元素之间的连续性。 如果长度不固定必然要求空间是动态分配的。这就带来一个问题:各个元素之间不一定能分配到相邻空间。如此,每个元素中都必须有一个指针能指向下一个元素。 链表是一种常见而又重要的数据结构,是动态地进行存储分配的一种结构。 简单链表的模型P294 链表的特点:链表中元素可以不连续存放 在链表结构中随机访问元素比较麻烦。 链表概述(2) 结构体变量用来表示链表结构最合适。Why? 可定义一个自引用的结构体以表示链表结点 例: struct student{ long num; float score; struct student * next; }; 一定要深刻理解其含义,这是一个基本操作! 注意,下面是错的: 为什么呢?会造成无穷尽现象! struct student{ long num; float score; struct student next; }; 注意:上面只是定义了一个结构体类型,还没有实际分配空间,也就没有所谓的链表! 处理动态链表所需的函数(1) 学习的时候,注意: 函数的功能,输入和输出情况! 这里是定义函数,而不是定义指向函数的指针! malloc #include alloc.h void * malloc (size_t size); calloc #include alloc.h void * alloc (size_t nelem, size_t elsize); free #include alloc.h void free (void * block); 处理动态链表所需的函数(2) void *是ANSI中引进的,用来表示通用指针 malloc时的强制类型转换(P277) main() { char * name; name=(char *)malloc(10); strcpy(name, Zhang San); printf(%s, name); free(name); } 链表的相关操作(1) 静态链表(简单链表) 程序的实现的几个关键步骤: 借助变量,构造空间和值 建立变量间关系 通过指针变量来访问链表中的每个节点 例子:P295例11.7 一定要注意c.next=NULL的作用 p=p-next;的含义,就是实现了“接力”! 链表的相关操作(2) 动态链表 注意: 都是基本操作!应该熟记! 初学时一定要思考每一语句的顺序和存在的意义! 一定要考虑多个节点的处理! 可能有的问题只需要用p1而有的用p2,需要思考必要性 动态链表的操作 动态链表的建立和输出 对链表中节点的删除和插入 注意:上面的各个操作只有提供了若干子函数,需要构造一个主函数来调用后才能直观看见结果! 动态链表的建立(见1201) 例子:P298 链表的相关操作(3) 动态链表的输出 例子:P300例子11.

文档评论(0)

wuyoujun92 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档