- 1、本文档共56页,可阅读全部内容。
- 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
- 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
01040203在程序运行时,不仅数据要占用内存空间,程序的代码也被调入内存并占据一定的内存空间。每一个函数都有函数名,实际上,这个函数名就是该函数的代码在内存的起始地址。当调用一个函数时,编译系统就是根据函数名找到函数代码的首地址,从而执行这段代码。由此看来,函数的调用形式:函数名(参数表),其实质就是:函数代码首地址(参数表)。函数指针:就是指向某个函数的指针,它是专门用于存放该函数代码首地址的指针变量。一旦定义了某个函数指针,那么,它就与函数名有同样的作用,在程序中就可以象使用函数名一样,通过指向该函数的指针来调用该函数。指向函数的指针函数指针的定义语法形式如下:其中:数据类型为函数指针所指函数的返回值类型;形参表则列出了该指针所指函数的形参类型和个数。函数指针名与*外面的圆括号()是必须的,如果去掉圆括号,将被解释为函数的返回值为指针。数据类型(*函数指针名)(形参表);函数指针在使用之前也要进行赋值,使指针指向一个已经存在的函数代码的起始地址。语法形式为:函数指针名=函数名;调用函数指针指向的函数有如下两种格式:函数指针名(实参表);(*函数指针名)(实参表);例如:intadd(inta,intb);//定义函数int(*fptr)(inta,intb);//定义函数指针fptr=add;//函数指针赋值虽然三种调用形式的结果完全相同,当用指向函数的指针调用函数add()时,习惯上使用?(*fptr)(1,2),因为这种形式能更直观地说明是用指向函数的指针来调用函数。(1,2);r(1,2);说明:采用下列任何一种形式调用函数add:*fptr)(1,2);多重指针如果已经定义了一个指针类型,我们再定义一个指针,用于指向已经定义的指针变量,后面定义的指针变量就是一个指向指针的指针变量,简称指向指针的指针,这样的指针也称二重(级)指针。三重及以上的指针统称为多重指针。例如:int**pp;定义了一个二级指针变量,等效于下列定义方式:typedefint*P;P*p;例:inta,*p,**pp;p=a;pp=p; 动态存储分配和释放存储空间**注意:这里是以字节计算的单元数目void* malloc(size_tsize);void free(void*pMemory);C的做法char*p=(char*)malloc(100);strcpy(p,”HelloWorld!”);free(p);例如:C++的做法**使用运算符new和delete使用形式 type是一个数据类型名,p是该类型的指针变量,new的作用就是从堆空间中分配一块与type类型的数据一样大小的内存(如果分配失败,new返回一个空指针),该内存地址被存于指针p中。一旦不想再使用,可以用delete来释放该内存空间。type*p;p=newtype;deletep;举例**int*p;0101020304p=newint;p=50;deletep;020304几点注意**使用new申请的内存空间是没有名字的,只能通过指针间接访问它们。用delete释放的内存空间必须是由new分配的空间,否则执行delete时将会导致严重的错误。例如:int*p;deletep;//出错int*p,value;p=value;deletep;//出错new和delete的典型用法**动态分配和释放单个数据的存储区#includeiostream.hvoidmain(){ int*p;p=newint; if(p==NULL){ cout“Allocationfailure!\n”; }else{ *p=15; cout*p; deletep; }}pp15用new运算符初始化单个数据的存储区**是用小括号将初始值括起来。初始值可以是常量、变量、以及表达式。type*p;P=newtype(初始值);……deletep;几点说明:语法为:举例#includeiostream.hvoidmain(){ int*p; p=newint(100); if(p==NULL){ cout“Allocationfailure!\n”; }else{ cout*p; deletep; }}//如果p
您可能关注的文档
- 表里一致的沟通.ppt
- 长虹变频空调室内机电路原理与维.ppt
- 装配夹具数字化设计制造.ppt
- 车刀的几何角度.ppt
- 隐函数与参量函数的导数.ppt
- 造价员基础理论.ppt
- 运输提升题库试题.ppt
- 钢筋混凝土剪力墙设计.ppt
- 血液透析充分性的评价.pptx
- 证券投资概论.ppt
- 2024年度安永全球另类投资基金调查报告.docx
- 2024年中国汽车产业出海回顾分析 -中汽信科国际化研究团队.docx
- 【民航局国际合作服务中心】马尔代夫民航业发展研究报告.docx
- 2025走向融合与深化的中国媒介市场报告-星传媒体.docx
- 2023Givaudan和ESG目的与性能.docx
- 中国民间应对气候变化行动故事集-教育故事.docx
- 2025AI制药市场规模产业链构成应用现状及AI制药公司分析报告.docx
- 医疗器械专题之基因测序:分子诊断掌上明珠,四代测序开启规模化应用时代.docx
- 2024年中央银行黄金储备调查报告 202406.docx
- 智慧芽 -2024第4季度全球潜力靶点及FIC产品调研报告.docx
文档评论(0)