C++引用在本质上是什么,它和指针到底有什么区别?

发布时间 2023-12-20 13:11:21作者: mmmm..mmmm

参考文章:https://www.bilibili.com/read/cv13541907/

对于指针变量P,引用变量Q,以及变量a=10;

赋值过程:

  P=&a;

  &Q=a;

P=&a:

  将变量a的地址传给指针P。a的地址上存的值是10;P的地址上存值是a的地址;

*P:

  指向的是存在指针P上的地址(a的地址)上的内容,即a的值10。指针P指向的是地址,或者说指针P中存的它所指向变量的地址。而要操作所指向地址中所存的数值(即a中所存的值10),需要在指针P前加           *。这略显麻烦,而引用就是将指针P从地址到加*这个过程进行了封装。

Q:

  是引用变量,当&Q=a语句运行时,将变量a的地址传给引用变量Q,这和指针类似,P和Q中存的都是a的地址。而Q要操作a中的数值时,可以直接操作,如Q=15(等价于a=15,等价于*P=15);

       所以引用变量和指针变量的相同点在于,二者存的都是所指向的变量的地址;而区别在于,指针需要在指标变量P前面加*才能操作所指向的变量数值;引用却可以直接操作,不需要加任何符号。

简单粗暴理解就是:

  对指针而言:“P---*P---操作所指变量的值”;需要经历中间加*的过程才能操作变量;

  对引用而言:“Q---*Q---Q---操作所指变量的值”;由于C++封装了加*这一过程,所以从用户角度来来看,相比于P,Q操作变量经历的过程更少,不用加*可以直接操作。但实际上,Q操作变量的过程相比于P是多一个步骤,只不过C++将Q+*=Q这一过程封装了。所以原本更繁琐的过程:“Q---*Q---Q---操作所指变量的值”就在用户角度便简化成了更精简的过程:“Q--操作所指变量的值”。

C++小白,如有错误,还请大佬多多指正!