引用的实现机制

mac2025-11-15  4

引用的机制(研究性课题)

研究一:引用到底是什么?

定义形式:

类型名 & 引用名 = 被引用对象;

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修饰,不能更改指针中存放的地址,只能更改指针所指向的值也即上述给出定义中传递实参本身!

补充:以上内容均是本人在老师启发下所得,笔者正读大二,本着对编程探索的喜爱进行此研究性课题,若有错误敬请指导改正,谢谢!

最新回复(0)