- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
C++中的引用PPT制作:武坤秀演讲:汪婷婷资料搜索:余金英 杨倩 位钰莹 赵艳萍 汪婷婷 引用的定义引用是c++对c的一个重要扩充。在c++中,变量的引用就是变量的别用,因此引用又称为别名。申明一个引用的格式类型 引用名=已定义的变量名(其中“”是引用声明符,此时它不代表地址)例如:int j=i;(不是将变量i的值赋给引用j,而是使j 成为变量i的引用,即变量i的别名)注意:1.引用不是一种独立的数据类型,它必须与某一种类型的变量相联系。在声明引用时,必须立即对它进行初始化,不能声明完成后在赋int i=10; int j;没有指定j代表哪个变量 j=i;不能声明完成后再赋值double a; int b=a; 声明b是一个整型变量的别名,而a不是整型变量(2)引用声明完毕后,相当于目标变量名有两个名称,即该目标原名称和引用名,且不能再把该引用名作为其他变量名的别名。 ra=1; 等价于 a=1;(3)不能建立数组的引用。(4)不允许建立void类型的引用。(5)不能建立引用的引用,不能建立指向引用的指针.。(6)可以用const对引用加以限定,不许改变该引用的值。 常引用常引用声明方式:const 类型标识符 引用名=目标变量名;如果既要利用引用提高程序的效率,又要保护传递给函数的数据不在函数中被改变,就应使用常引用。 用这种方式声明的引用,不能通过引用对目标变量的值进行修改,从而使引用的目标成为const,达到了引用的安全性。 【例】int a ;const int ra=a;ra=1; //错误a=1; //正确 这不光是让代码更健壮,也有些其它方面的需要。指针传递和引用传递? ?指针传递参数本质上是值传递的方式,它所传递的是一个地址值。值传递过 程中,被调函数的形式参数作为被调函数的局部变量处理,即在栈中开辟了 内存空间以存放由主调函数放进来的实参的值,从而成为了实参的一个副本。 值传递的特点是被调函数对形式参数的任何操作都是作为局部变量进行,不 会影响主调函数的实参变量的值。 ?引用传递过程中,被调函数的形式参数也作为局部变量在栈中开辟了内存空间,但是这时存放的是由主调函数放进来的实参变量的地址。被调函数对形参的任何操作都被处理成间接寻址,即通过栈中存放的地址访问主调函数中的实参变量。正因为如此,被调函数对形参做的任何操作都影响了主调函数中的实参变量。 引用传递和指针传递是不同的,虽然它们都是在被调函数栈空间上的一个局部变量,但是任何对于引用参数的处理都会通过一个间接寻址的方式操作到主调函数中的相关变量。而对于指针传递的参数,如果改变被调函数中的指针地址,它将影响不到主调函数的相关变量。如果想通过指针参数传递来改变主调函数中的相关变量,那就得使用指向指针的指针,或者指针引用。C++中的引用和指针★ 相同点: 1. 都是地址的概念;指针指向一块内存,它的内容是所指内存的地址;引用是某块内存的别名(java中的引用其实也是别名的意思)。★ 区别: 1. 指针是一个实体,而引用仅是个别名;2. 引用使用时无需解引用(*),指针需要解引用;3. 引用只能在定义时被初始化一次,之后不可变;指针可变; 引用“从一而终” 4. 引用没有 const,指针有 const,const 的指针不可变;5. “sizeof 引用”得到的是所指向的变量(对象)的大小,而“sizeof 指针”得到的是指针本身(所指向的变量或对象的地址)的大小;typeid(T) == typeid(T) 恒为真,sizeof(T) == sizeof(T) 恒为真,但是当引用作为成员时,其占用空间与指针相同(没找到标准的规定)。6. 指针和引用的自增(++)运算意义不一样;(7)引用被创建的同时必须被初始化(指针则可以在任何时候被初始化)。 (8)不能有NULL 引用,引用必须与合法的存储单元关联(指针则可以是NULL)。(9)一旦引用被初始化,就不能改变引用的关系(指针则可以随时改变所指的对象)。你如何决定在什么时候使用指针,在什么时候使用引用呢? 首先,要认识到在任何情况下都不能用指向空值的引用。一个引用必须总是指向某些对象。因此如果你使用一个变量并让它指向一个对象,但是该变量在某些时候也可能不指向任何对象,这时你应该把变量声明为指针,因为这样你可以赋空值给该变量。相反,如果变量肯定指向一个对象,例如你的设计不允许变量为空,这时你就可以把变量声明为引用。 “但是,请等一下”,你怀疑地问,“这样的代码会产生什么样的后果?” char *pc = 0; // 设置指针为空值 char rc = *pc;// 让引用指向空值 这是非常有害的,毫无疑问。我们以后将忽略一个引用指向空值的可能性。 因为引用肯定会指向一个对象,在C++里,引用
文档评论(0)