您的位置:首页 > 编程语言 > C语言/C++

C++之引用

2016-05-19 20:10 309 查看
引用相当于给变量起个别名,并不分配内存空间,C++中话是这么说,但实际上这个引用就相当于C语言中的指针,实际是开辟了4字节的空间,与开辟指针大小的空间相同,且指向变量的地址。

引用相当于指针,其引用的大小与指针大小相同,但当打印sizeof时,打印出的就是变量的大小,这就是C++中做的一种蒙蔽。

例如:

int a = 200;
int &ra = a;
ra = 300;   //ra可以修改值
int b = 100;
int &ra = b;    // 编译报错


其中int &ra不可以再指向其他变量。也就是说,引用int &ra相当于int *const ra,即ra可以修改自身的值,但不能修改其指向,但指针可以修改其指向。

一、引用实际是指针

下面来验证一下引用实际是个指针:

#include<iostream>

using namespace std;

int main() {
double a = 10.5;
double &p = a;

cout << sizeof(p) << endl;

system("pause");
return 0;
}


打开内存和监视窗口,进行调试:

这是变量a的地址,在栈上分配了空间,在分配的空间中写入了值。





再来看引用p:





监视到p的地址是0x002dfe34,与变量a处于同一地址,通过内存可以看到实际p是指向了0x002dfe34(地址从左到右是低地址到高地址),so引用就是个指针。

最后打印出sizeof(p)是8,看内存截图p就占了4个字节,这一切都是C++的障眼法。



二、总结

1、引用型变量必须初始化,引用变量必须挂在一个现有的同类型变量上;

2、引用变量的地址与来源变量的地址在同一个地址上,即地址相同;

3、引用变量与来源变量任何一个数值变化,则另一个一定变;

4、引用变量做函数参数,经常使用来代替原变量赋值或者取值;

5、引用变量的原理实际上就是指针变量,C++用障眼法让引用看起来是替身。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  C++