引用的机制(研究性课题)
研究一:引用到底是什么?
定义形式:
类型名 & 引用名 = 被引用对象;
C++定义:
引用是被引用对象的一个别名,引用形式即传递实参本身, 是通过被引用对象地址的直接传递实现的 ,对引用的更新或赋值将直接操作在被引用对象身上。
代码说明引用是对被引用对象地址的传递
#include <iostream>
using namespace std;
int main()
{
int a=1;
int & b= a;
cout << "a:address->" << &a << endl;
cout << "b:address->" << &b << endl;
return 0;
}
运行结果表示,引用是对被引用对象地址的传递,那么引用是和被引用对象共用一个地址吗?继续进行研究。
引用的实质性探索
#include <stdio.h>
#include<iostream>
using namespace std;
int main()
{
int a = 3;
//int& b = a;
int * const c= &a;
printf("a=%d,c=%p\n",a,c);
printf( "a:address->%p\n",&a);
printf( "b:address->%p",&c);
return 0;
}
通过将两次运行发现用和定义一个指向被引用对象的‘指针’是一样的,那是不是引用就是指针呢?请注意此处在指针c前加的const!我们继续探究,const是否多余。
const不多余
#include <iostream>
using namespace std;
int main()
{
int a=1,d=2;
int & b= a; //引用变量名b
int *p=&b;
int *c=&d;
p=c; //通过指针c试图更改引用的地址
cout<<b<<endl;
return 0;
}
我们想通过对指针,对引用的地址进行修改,结果发现虽然编译通过了,但运行发现,引用不不能通过被修改地址的方法修改引用的值,因此上述所说的引用的实质是指针并不准确,我给出如下结论。
引用的机制是计算机帮我们定义了一个指向被引用对象特殊的指针,指针中存放的内容是被引用对象的地址,这个地址被const修饰,不能更改指针中存放的地址,只能更改指针所指向的值也即上述给出定义中传递实参本身!
补充:以上内容均是本人在老师启发下所得,笔者正读大二,本着对编程探索的喜爱进行此研究性课题,若有错误敬请指导改正,谢谢!