C++中的引用

    在c++中,我们除了可以通过指针的方式访问变量,这里其实还有一种方式可以达到这种目的----引用。

    引用其实就相当于直接给一个变量起一个别名,就像人可以直接通过大名称呼,也可以通过小名称呼。在C++中,我们该如何创建一个引用呢?其实和简单,语法是:数据类型  &别名=原名,如下:

int a=10;
int &b=a;//引用

在使用的过程中,我们既可以用a来访问这个数据10,也可以用b来访问这个数据,无论是在传参中还是在cout中打印,这个a和b的作用其实差不多,同样,我们也可以直接修改b的值,来修改a的值,这两个名字形容的是一个相同的内存空间。

一、注意事项

    1、这两个变量直接其实还是有很多差异的,你比如说我们在初始化的时候,a可以直接声明,而这个b他并不可以这样,b在声明的同时一定需要我们对其赋值;如下:

int &b=a;

  2、  我们在使用引用的时候,我们的引用变量是无法被更改的。当然这里的“更改”并不是我们去更改b所指向空间的数据,而是说这个b一旦修饰了a这个变量,就不能更改为其他变量了。就比如说一个人叫张三,我们可以叫他小张,但是我们不能叫李四小张,大概就是这个意思。

3、  在函数传参的方面,引用变量其实挺方便的。我们都知道,函数传参分为两个方面,值传递和地址传递,而现在又多了一个引用传递。我们在使用引用进行传递的时候,传进去的参数其实是可以修改的,这个功能其实就类似于指针,其变量内部的数据的修改是可以同步到我们的实参上面的,当然按照上述,引用的修饰对象不可修改。说了这么多,以下是代码:

void func(int &a)
{
  
}

int main()
{
  int a=10;
  func(a);
  return 0;
}

   

       4、引用可以作为函数返回值进行返回,但是我们不能返回局部变量的引用。这是什么意思呢,其实很简单,函数内部所定义的变量,在前面的文章中,我们知道是存放在栈区当中的,在函数运行完之后引用所指向的变量也随之释放,所以不能返回局部变量的引用。而当我们函数内部的变量并不是存放在栈区而是静态区呢?这里我们的函数就可以正常返回这个引用,具体如下:

int& func()
{ 
  static int a=10;
   return a;
}

这里的a是可以作为返回值,被我们main函数所接收。注意,这里函数的类型变成了int&

同样下面的代码就是错误的了

int& func()
{
  int a=20;
  return a;
}

这里的a是接收不到的。

二、引用的本质

      其实读到这里,我们其实不难理解,引用的本质其实就是指针常量。你比如说:

int a=10;
int &ret=a;

当我们写出这样的代码之后,编译器发现这是引用,表面是这样定义,实际上编译器转化为了

int *const ret=a;

 到这里上面的关于引用不可改的描述就好理解了,正是因为有const修饰,我们的ret只能指向a,不能指向其他的变量,但是a所表示的数据是可以修改的,当我们将a的值改成了20,那么ret的值也会相应改为20。

三、常量引用

      当我们传参的时候如果传输的参数是一个引用,为了防止它的值改变,我们也可以在传参的时候加一个const进行修饰,来达到目的。

void func(const int&a)
{

}

    通过上述,引用在c++中其实还是很方便的,他本质是一个指针,虽然不可以修改其指向,但是仍然可以达到指针对应的功能,在使用时,我们也只需要将其视为一个变量的别名就可以使用了,其他指针相关的操作,便由编译器进行完成。

好了,以上就是这篇文章的全部内容了,这是我作为一个编程萌新的一些拙见,如果有哪里不对的地方欢迎各位大佬们指正。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值