您好,欢迎访问三七文档
当前位置:首页 > 行业资料 > 能源与动力工程 > 21天学通C++-第十七章-引用与内存管理
联系方式:北京源智天下科技有限公司第十七讲:引用与内存管理杨章伟e-mail:jtclass@163.com1-2北京源智天下科技有限公司联系方式:课程内容安排•引用•引用的操作•动态内存分配•const引用•指针与引用的区别•综合练习•思考和习题1-3北京源智天下科技有限公司联系方式:引用•引用引入了对象的一个同义词,引用只是绑定的对象的另一名字,作用在引用上的所有操作事实上都是作用在该引用绑定的对象上。•简单来说,引用就是某一变量(目标)的一个别名,对引用的操作与对变量直接操作完全一样。如果对引用进行输出、赋值等操作,其执行如图17-1所示。引用ival变量val赋值输出1-4北京源智天下科技有限公司联系方式:定义命名空间•C++中,有两种形式的命名空间——有名的命名空间和无名的命名空间。标准C++中,命名空间的定义格式为:•有名的命名空间:•namespace命名空间名•{•声明序列•}•无名的命名空间:•namespace•{•声明序列•}1-5北京源智天下科技有限公司联系方式:声明引用•引用其实是变量的另一个名字。因此,与变量同样的,在使用引用前也需要对其进行声明,引用的声明语句如下:•类型标识符&引用名=目标变量名;•例如,下列语句声明了一个对整型变量a的引用ra。•inta;•int&ra=a;//定义引用ra,它是变量a的引用,即别名1-6北京源智天下科技有限公司联系方式:引用的操作•引用只是某个变量或目标的同义词,引用的两个主要用途:•作为函数参数•从函数中返回值。1-7北京源智天下科技有限公司联系方式:引用作为函数参数•下面定义了函数swap(),其定义的形式参数p1和p2就是引用,而在main()函数中调用swap()函数。1-8北京源智天下科技有限公司联系方式:代码清单•1#includeiostream.h•2voidswap(int&p1,int&p2)//此处函数的形参p1,p2都是引用•3{•4intp;//定义整型变量p•5p=p1;//交换两个变量的值•6p1=p2;•7p2=p;•8}•9voidmain()•10{•11inta,b;•12coutPleaseinput2number:endl;•13cinab;//输入a,b两变量的值•14coutBeforeswap:endl;•15couta=aendl;//输出交换前的值•16coutb=bendl;•17swap(a,b);//直接以变量a和b作为实参调用swap函数•18coutAfterswap:endl;•19couta=aendl;//输出结果•20coutb=bendl;•21}1-9北京源智天下科技有限公司联系方式:引用作为返回值使用引用返回函数值。引用作为函数的返回值对函数有一定的要求,其要求函数定义时要按以下格式来定义:类型标识符&函数名(形参列表及类型说明){函数体}注意:以引用返回函数值,定义函数时需要在函数名前加“&”符号。用引用返回一个函数值的最大好处是在内存中不产生被返回值的副本。1-10北京源智天下科技有限公司联系方式:动态内存分配态内存分配是指在程序运行期间根据实际需要随时申请内存,并在不需要时释放,这样可以节省内存空间,提高程序运行效率。C++中,提供了两种运算符进行动态内存管理:new和delete运算符。将new运算符与delete运算符一起使用,就可以直接进行动态内存的申请和释放。1-11北京源智天下科技有限公司联系方式:中,new运算符用于申请所需的内存单元,返回指定类型的一个指针,在有些参考资料中也称为创建内存单元。一般来说,new运算符的语法格式为:指针=new数据类型;其中,指针应预先声明,指针指向的数据类型与new后的数据类型相同。若申请成功,则返回分配单元的首地址给指针;否则(比如没有足够的内存空间),则返回0(一个空指针)。例如,下列语句申请一个整型数据空间:int*p;p=newint;1-12北京源智天下科技有限公司联系方式:运算符相反的,delete运算符是释放new申请到的内存。也即当程序中不再需要使用运算符new创建的某个内存单元时,就必须用运算符delete来删除它,其语法格式为:delete指针;//释放非数组内存单元delete[常量]指针;//释放数组内存单元其中,指针是指向需要释放的内存单元的指针的名字。并且delete只是删除动态内存单元,并不会将指针本身删除。1-13北京源智天下科技有限公司联系方式:对象的引用,而非const引用表示指向非const对象的引用。例如,下面语句定义了常量ival和const引用:constintival=1024;//定义const常量ivalconstint&ref1=ival;//引用和对象都是const如果定义了一个非const引用,将const对象赋给该引用时,这是非法的,因为对引用的修改将改变const对象的值,而const对象是不能改变值的。1-14北京源智天下科技有限公司联系方式:指针与引用的区别指针其实就是一个变量,和其他类型的变量是一个样子的,其是一个占用四字节的变量(32位机上),它与其他变量的不同之处就在于它的变量值是一个内存地址,指向内存的另外一个地方。而引用则是变量的一个别名。注意:一个指针变量可以指向NULL,表示它不指向任何变量地址,但是引用必须在声明的时候就得和一个已经存在的变量相绑定,而且这种绑定不可改变。1-15北京源智天下科技有限公司联系方式:综合练习•在C++程序设计中,内存的动态分配是应用较多的,尤其是在包含类的时候,下面综合练习显示了运算符new和delete的基本用法。1-16北京源智天下科技有限公司联系方式:思考和习题•C++中为什么要引入引用的概念?其是如何定义的?•引用在C++程序中用作参数函数和返回值,分别是如何实现的?•为什么C++中已经有动态内存分配的标准库函数了,还要引入运算符new/delete,其相比较有什么优点?•const引用与普通引用的区别在于?•指针与引用的区别在于?
本文标题:21天学通C++-第十七章-引用与内存管理
链接地址:https://www.777doc.com/doc-6125641 .html