C++对于引用和常引用(const)的初步理解

本文详细介绍了C++中引用的概念及用途,包括基本引用、常引用的使用方法,并通过实例展示了如何利用引用提高程序效率。

一、引用

关于&:按照我们最初的理解,&我们称之为取址符,例如&x也就是取出参数x的地址,理解为x在内存中储存的位置,每个地址储存的东西应该是固定的,也就是找到了一个地址,我们就能查看这个地址到底存了啥,当然我们肯定也能通过这个地址去改变其储存的东西。

然后看下面一段代码:

int a = 10;
int &b = a;
cout<<a<<" "<<b<<endl;
cout<<&a<<" "<<&b<<endl;

输出:10 10
           0018FDB4 0018FDB4

为何在这里输出a,b是两个相同的值呢?甚至它们各自的地址都相同?因为这里的&b = a,并不代表着b的地址等于a的值,而是表示新定义的b是a的一个引用,a和b都指向了同一个地址,当然也就拥有了相同的值。就好像我通过两种不同的途径找到了你家的住址,当然同样的住址肯定住着同样的人了。所以说,引用的作用就是给参数起了另一个名字,本质上这两个就是同样的东西。

既然本质上是一样的东西,我们应该就能通过改变引用的值,间接改变了原参数的值,代码如下:

int a = 10;
int &b = a;
b = 20;
cout<<a<<" "<<b<<endl;

输出:20 20

这也正是我们想看到的结果。

进阶一下,看如下代码:

#include <stdio.h>
#include <iostream>
using  namespace  std;
 
//c++中的引用实例
void  fun1( int  &x){
      printf ( "形式参数的值为:%d\n" ,x);
      printf ( "形式参数的地址为:%d\n" ,&x);
      x+=10;
}
void  fun2( int  *num){
   printf ( "形式参数的值为:%d\n" ,*num);
   printf ( "形式参数的地址值为:%d\n" ,num);
   printf ( "形式参数的地址为:%d\n" ,&num);
   *num =(*num)+10;
 
}
 
int  main(){
    int  num = 4,a=3;
 
     printf ( "实参num的值为:%d\n" ,num);
     printf ( "实参num的地址为:%d\n" ,&num);
     fun1(num);
    cout<< "num的值为:" <<num<<endl;
 
    fun2(&a);
    printf ( "实参a的值为:%d\n" ,a);
    printf ( "实参a的地址为:%d\n" ,&a);
    return  0;
}

输出:

实参num的值为:4
实参num的地址为:7338356
形式参数的值为:4
形式参数的地址为:7338356
num的值为:14
形式参数的值为:3
形式参数的地址值为:7338344
形式参数的地址为:7338132
实参a的值为:13
实参a的地址为:7338344

可以看到,在函数fun1中,我们传入的是一个int& x,当使用这个函数给它传入一个实参num的时候,就相当于执行了语句int &x=num,就相当于函数的形参x就是实参num的引用,这时候函数里面的形参x就相当于实参sum,函数输出x和&x就输出了sum的值和sum的地址,同时改变形参x的值,再在函数外部输出sum的值,发现sum的值也相应改变;而在函数fun2中,我们传入的是一个指针变量int* sum,这时候我们传入参数&a,也就是传入了a的地址,使sum=&a,这时候函数输出*sum也就是取了地址&a储存的值输出,也就是a的值,输出sum也就是输出了&a,也就是a的地址,输出&sum就是输出了sum的地址,也就是传入的地址值的地址,最后在函数里的*sum=(*sum)+10,通过直接找到地址改变了该地址里面储存的值,也就是改变了a的值,我们最后在函数外部输出a的值,也确实发现a的值作了相应的改变。

二、常引用

常引用使用方法:const 类型标识符 & 引用名 = 被引用的变量名

当我们不希望引用能够改变我们原本变量的值时,我们可以使用常引用。

const中文意思是“常量;常数”,因此例如const int &a=b,这个语句就是定义了一个a是b的常引用,a被定义之后就相当于一个常数了,不可再进行更改,同时也不能通过修改a的值修改原变量的值了。

看下面的代码示例:

int a = 10;
const int &b = a;
b = 20;   //compile error
a = 20;

在这段代码中,如果我们想改变b的值来改变a,用b = 20,这时将会显示报错;而我们直接修改原变量的值,则是可行的。

三、引用有啥作用

通过引用的性质我们已经知道,通过引用我们可以改变原始变量的值,因此我们常常将引用作为函数的参数。当我们需要通过某个函数进行某变量的相应数值改变,如果我们传入的参数是变量本身 的值,那么在函数里面进行改变的也只是这个值,原始变量并没有改变,如果我们需要改变,我们就要再通过这个函数去返还这个改变的值并赋给原始变量;如果我们使用引用作为传入参数,则相当于函数是在直接改变原始变量的值,我们不必再进行返还赋值,这样我们就大大提高了程序效率。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值