c语言中指针用法PPT[宣讲].pptVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
(1)可读性问题:因为对数据对象的间接访问比直接访问相对难以理解。 (2)重用性问题:函数调用依赖于上层函数或整个外部内存空间环境,丧失其封装特性(黑盒特性),所以无法作为公共模块来使用。 (3)调试的复杂性问题:跟踪错误的区域从函数的局部数据区扩大到整个内存空间,不但要跟踪变量,还要跟踪地址,错误现象从简单的不能得到相应返回结果,衍生到系统环境遭破坏甚至死机。 * 精品PPT | 实用可编辑 2.指针函数 函数返回值的类型是指针类型,这样的函数称为指针函数。例如: char * strcat(char *s1,const *s2) ; 该函数返回值的数据类型是字符指针,也即该函数调用结果返回字符串s1的地址(两串连接后所形成的新串的地址)。 例6-13 分析下面程序的执行结果? * 精品PPT | 实用可编辑 3 .函数指针 #include iostream.h #include string.h main( ) { char s1[100],s2[]={aaa}; cout strcpy(s1,s2); } 输出:aaa (1) 什么叫函数指针 程序运行时,每个函数都存放在代码区中,有一个入口地址,称为函数地址,函数名就表示该地址。 指向函数地址的指针称为函数指针,通过该指针可以调用相应的函数。 * 精品PPT | 实用可编辑 (2)声明函数指针 语法: 类型标识符名 (*指针变量名)(参数类型表); 例如:int (*fp)(int); fp被声明成整型函数指针,可以存放一个整型函数名。 例如:int fn1(int); ...... int (*fp)(int); fp=fn1; // fp被声明成函数指针 // fp被赋予fn1函数的地址 * 精品PPT | 实用可编辑 (2) 用函数指针调用函数 语法: 函数指针变量名(实参表); 或:(*函数指针变量名)(实参表); 例如:int fn1(int); ...... int (*fp)(int); fp=fn1; …… y=fp(5); // fp被声明成函数指针 // fp被赋予fn1函数的地址 // 用fp调用fn1函数 * 精品PPT | 实用可编辑 #include iostream.h int fn1(int); void main() { int x,y; int (*fp1)(int); x=1; fp1=fn1; y=fp1(x); } int fn1(int x) { cout x*5; return (x*5); } y=fn1(x) 输出? 5 * 精品PPT | 实用可编辑 (3)函数指针用作函数参数   当函数形参是函数指针时,对应的实参必须是函数名,例如:   实参是函数名,在函数调用时实现函数地址的传递,这样可以在被调函数体内,通过对函数指针形参的引用来调用另一函数,而且对应不同的实参值可以调用不同的函数。(p179)   这就是要使用函数指针形参的原因。   char f2(int (*fp1(int)); …… f2(f1); * 精品PPT | 实用可编辑 6.6 堆内存管理 允许程序运行过程中直接进行内存管理,这是C++的一大特色。 (1)程序(函数)中定义的数组,其大小事先难以确定,如果定义过大,会造成存储空间的浪费。采用即时申请内存空间的办法,不但可以动态地建立数组,而且可以保证其大小总是符合实际情况。 通过直接内存管理可以实现动态存储分配,提高内存使用率。以下几种情况尤其需要这一技术的支持: * 精品PPT | 实用可编辑 (2)函数中包含太多的数组,一旦该函数被调用,就必须占据大量的栈空间。通常这些数组并不是同时使用的,这同样造成太大的浪费。 采用堆内存管理技术,可以控制程序在实际需要使用某一数据对象时才去申请数据空间,一旦用完,马上释放。 (3)程序中定义了结构体、类或其它数据对象,这样的数据对象有时需要超乎寻常的内存空间,因此更需要堆内存的支持。 * 精品PPT | 实用可编辑 1.堆内存 堆(Heap)是区别于

文档评论(0)

朱素云 + 关注
实名认证
文档贡献者

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

1亿VIP精品文档

相关文档