77范文网 - 专业文章范例文档资料分享平台

C++中的指针与引用详细解读(3)

来源:网络收集 时间:2018-12-17 下载这篇文档 手机版
说明:文章内容仅供预览,部分内容可能不全,需要完整文档或者需要复制内容,请下载word后使用。下载word有问题请添加微信号:或QQ: 处理(尽可能给您提供完整文档),感谢您的支持与谅解。点击这里给我发消息

80487de: 5e pop %esi

80487df: 89 ec mov ?p,%esp

80487e1: 5d pop ?p

80487e2: c3 ret

从汇编代码可以看出实际上指针和引用在编译器中的实现是一样的:

引用int& ref=i;

8048727: 8d 44 24 1c lea 0x1c(%esp),êx// esp寄存器里的变量i的地址传给eax

804872b: 89 44 24 18 mov êx,0×18(%esp)//将寄存器eax中的内容(i的地址)传给寄存器中的变量ref,即int& ref=i

指针int* p=&i;

8048777: 8d 44 24 1c lea 0x1c(%esp),êx// esp寄存器里的变量i的地址传给eax

804877b: 89 44 24 10 mov êx,0×10(%esp) //将寄存器eax中的内容(即i的地址)传到寄存器esp中的p

虽然指针和引用最终在编译中的实现是一样的,但是引用的形式大大方便了使用也更安全。有人说:”引用只是一个别名,不会占内存空间?”通过这个事实我们可以揭穿这个谎言!实际上引用也是占内存空间的。

5、指针传递和引用传递

为了更好的理解指针和引用,我们下面来介绍一下指针传递和引用传递。当指针和引用作为函数的函数是如何传值的呢?(下面这一段引用了C++中引用传递与指针传递区别(进一步整理))

指针传递参数本质上是值传递的方式,它所传递的是一个地址值。值传递过程中,被调函数的形式参数作为被调函数的局部变量处理,即在栈中开辟了内存 空间以存放由主调函数放进来的实参的值,从而成为了实参的一个副本。值传递的特点是被调函数对形式参数的任何操作都是作为局部变量进行,不会影响主调函数 的实参变量的值。 引用传递过程中,被调函数的形式参数也作为局部变量在栈中开辟了内存空间,但是这时存放的是由主调函数放进来的实参变量的地址。被调函数对形参的 任何操作都被处理成间接寻址,即通过栈中存放的地址访问主调函数中的实参变量。正因为如此,被调函数对形参做的任何操作都影响了主调函数中的实参变量。 引用传递和指针传递是不同的,虽然它们都是在被调函数栈空间上的一个局部变量,但是任何对于引用参数的处理都会通过一个间接寻址的方式操作到主调函 数中的相关变量。而对于指针传递的参数,如果改变被调函数中的指针地址,它将影响不到主调函数的相关变量。如果想通过指针参数传递来改变主调函数中的相关 变量,那就得使用指向指针的指针,或者指针引用。

百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库C++中的指针与引用详细解读(3)在线全文阅读。

C++中的指针与引用详细解读(3).doc 将本文的Word文档下载到电脑,方便复制、编辑、收藏和打印 下载失败或者文档不完整,请联系客服人员解决!
本文链接:https://www.77cn.com.cn/wenku/zonghe/366339.html(转载请注明文章来源)
Copyright © 2008-2022 免费范文网 版权所有
声明 :本网站尊重并保护知识产权,根据《信息网络传播权保护条例》,如果我们转载的作品侵犯了您的权利,请在一个月内通知我们,我们会及时删除。
客服QQ: 邮箱:tiandhx2@hotmail.com
苏ICP备16052595号-18
× 注册会员免费下载(下载后可以自由复制和排版)
注册会员下载
全站内容免费自由复制
注册会员下载
全站内容免费自由复制
注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: