指针与引用的本质

 以上是ChatGPT的回答,应该是比较正确的回答,指针和引用是否分配内存空间,要看所使用的编译器。

本人使用的编译器:

指针和引用本质是一样的,经过编译器处理后,都是按照指针处理,占用内存空间。

对于指针和引用的区别,网上有很多讨论,大部分人说指针分配空间,引用不分配空间,引用只是变量的别名。有些定论并不是支持的人多就是对的,有时就是错误传承。别人说百遍,不如实验一遍,事实胜于雄辩。

#include <iostream>
using namespace std;
int main()
{
	int a = 77;
	int & ra = a;
	int b = 0;
	int* pa = &a;
	ra = 88;
	*pa = 99;

    cout<<(&a+1)<<endl;//变量ra的地址,根据汇编代码看出ra地址在a地址的上边,即 a地址+4字节
	cout<<hex<<*(unsigned long int *)(&a+1)<< endl; //变量ra地址中存放的值,即a的地址
	cout<<&a  <<endl;//变量a的地址
	cout<<&b  <<endl;
	cout<<&pa <<endl;
	return 0;
}
/*
打印如下:
0x7fff10068ec8
7fff10068ec4
0x7fff10068ec4
0x7fff10068ec0
0x7fff10068eb8

/*

反汇编上边的代码

 验证的思路:确认是否给变量ra分配了内存?若分配了内存,内存中存储的值是否就是变量a的地址?

通过汇编代码可以看出给ra分配了内存空间,由于每个变量在栈内存中存储的顺序并不是按照代码行的顺序排的(因为编译器优化),ra的内存空间在a的上边,运行程序打印出ra地址空间的值,确实与变量a地址一致。

因此,在引用中 int &ra=a;这一句代码可被编译器看做int * const ra=&a;//加上const的作用是表明指针ra的自身的值不能改变,而指向的值可以改变。也就是说引用相当于指针,引用与指针在编译时的方法一样,指向的都是变量的内存地址。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值