问答1 问答5 问答50 问答500 问答1000
网友互助专业问答平台

C++ 指针的引用问题

提问网友 发布时间:2023-01-31 18:06
声明:本网页内容为用户发布,旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。
E-MAIL:1656858193@qq.com
3个回答
热心网友 回答时间:2024-03-29 01:15

引用的地址就是被引用变量的地址。你把!=的情况直接输出地址看看,我这里全等,应该是编译器不同吧。

 

至于this,是个特殊的指针,一般我们自己定义的指针会分配一个内存空间,比如32位的地址会分配4字节的指针变量空间。然后指针赋值时,将某变量或对象的地址存入。但是this是编译器确定的常量地址,this指向对象地址,它本身是对象内部的相对偏移量,当然没有地址,所以无法引用。

 

一般基类指针和派生类指针不一样,而当一个派生类创继承的是虚基类,此时是一样的。

下面看看this到底是个什么东西,调试时查看反汇编,见附图:

函数返回this时,找到this指向的地址,取出后返回。

进入函数时,将CPU的基地址寄存器(ebp)入栈,也就是对象地址,初始化参数后。

第一行指令pop,弹栈到寄存器ecx

第二行是将ecx寄存器存入ebp-8的地址中,也就是在对象地址上面8个字节开始存放对象地址。

第三行根据this指针取得对象地址,存入寄存器eax。

注意这行的指令代码(8B 45 F8)最后一个字节,F8的十进制是-8,显然就是偏移量,是基地址的偏移量,所以this指向的就是ebp-8.而ebp-8的地址中正是第二行存入的基地址(对象地址)。

后面就是返回eax,观察监视窗口,this和ecx寄存器的值是一样的,该值就是对象地址,调试器已做了偏移量计算。

热心网友 回答时间:2024-03-29 01:16

不知道你用的是什么编译器,我在vc2013 做你上面的引用测试结果输出全是"=="


还有,this指针是对象的,而不是类的,不是同一个对象,那this指针自然也不同

给你个例子:

#include <iostream>
using namespace std;
class A
{
public:
void showthis()
{
cout<<this<<endl;
}
};
int main()
{
A a;
cout<<&a<<endl;
a.showthis(); //就是&a
return 0;
}

 L-value的意思是可被寻址的对象(就是常说的左值),也就是说能用某个内存地址的数值来引用的对象。而this不存在于任何内存地址空间,所以&this是不可行的,代码调用中出现this,就用对象的地址取代它,就像宏替换一样

追问

我用的是VC++6.0啊......刚才我在VS2008上试了一下 , 的确全是==啊, 难道是VC++6.0出错了?

接着我又试了这样的东西

然后发现的确输出了一个地址 , 难道这个地址不是this指针的内存地址吗?

    追答

    那不是this的地址,实际上other是个指针了,但使用了引用的语法,你可以这样试试

    A*const& other=this;
    A*const& other1=this;
    cout<<&other<<endl;
    cout<<&other1<<endl;

    你会发现输出不一样,引用的内部实现还真不好说

    热心网友 回答时间:2024-03-29 01:16
    不太清楚啊

    本文如未解决您的问题请添加抖音号:51dongshi(抖音搜索懂视),直接咨询即可。

    oppo微信怎么设置自动抢红包? 稻有什么组词 oopor17手机音质没有oppor9s好 平板怎么得到正在使用的壁纸 唐伯虎点秋香四大才子出场背景音乐叫什么? 电信猫怎么设置无线网络加密? g2904列车经过那些站 高铁抚州东至宁波需要经过哪些站点? oppo手机怎么删除桌面空白页 在好看视频发的作品如何设置不同步 印尼黑酸枝是红木吗 了解一下 抖音消费是哪个地区的 《非人学园》钟馗出装应援搭配攻略 怎么才能关注别人的微博呢? 陈建明出诊医院是哪个? 小米手机经常重启。怎么回事? 王字虎头铜铃铛古董图片和价格? 防止硬盘格式化 高手指教 水洗标是什么? 怎么找到腾讯会议文件夹在哪里 关于C语言中指针的引用的问题 沟通能力包含什么呢? 沟通的三大通用能力 一个好的沟通者应该具备哪些条件 怎样具备良好的沟通协调能力? 铁线莲如何种植 铁线莲种植方法 戴尔笔记本win8远程控制对方显示已经控制电脑了!为什么所有程序点不... 凯美瑞13款有哪些车型 16款凯美瑞有几个车型 离婚从起诉到开庭需要多久 ...用另一途径又说我手机号格式错误,因为也许是因为香港号码所以不_百 ... ...重置密保在填写“密保手机号码”时总是显示“手机号码格式错误... 玫瑰盐有什么营养 牛肉粥怎样做的做法 如何查看苹果iso11降 苹果什么时候正式推出iso11 ios11.0怎么升级iso11beta2 手机管家和手机显示内存不对 醋熏屋里能杀菌吗? 醋熏能消毒屋子吗?
    Top