c++中的引用

  • 引用的定义:

又称之为别名,引用不是定义一个新的变量,而是给一个已经定义的变量重新起一个名字。即c++系统不为引用类型变量分配内存空间。

  • 引用的格式:

类型 &引用变量名=已定义过的变量名;

#include<iostream>
using namespace std;

void main()
{
    int a;
    int &b=a;//b是a的引用,相当于别名,两者的内存地址是相同的
    cout<<&a<<endl;
    cout<<&b<<endl;
}

程序输出结果为:
这里写图片描述

  • 引用的作用:

主要用于函数之间的数据传递

#include<iostream>
using namespace std;

void Swap1(int i,int j)//普通传值,会重新给i和j分配空间,但由于i和j的声明周期只在Swap1函数内,所以在内部交换两者的值,不会传递到主函数
{
    int n=i;
    i=j;
    j=n;
}

void Swap2(int &i,int &j)//引用传值,i和j分别是a和b的引用,对i和j的修改某种意义上来说就是对a和b的修改,因为他们的内存空间地址相同。通过形参来修改实参的值
{
    int n=i;
    i=j;
    j=n;
}

void main()
{
    int a=3,b=4;
    Swap1(a,b);
    cout<<"a="<<a<<" "<<"b="<<b<<endl;
    Swap2(a,b);
    cout<<"a="<<a<<" "<<"b="<<b<<endl;
}

程序输出结果如下:第一次输出由于是值传递,所以a b的值不会改变,第二次是引用传递,两者的值发生了改变
这里写图片描述
在c语言中,要想通过形参修改实参的值我们可以通过传递实参的地址来实现

void Swap3(int *a,int *b)
{
    int n=*a;
    *a=*b;
    *b=n;
}

void main()
{
    int a=3,b=4;
    Swap3(&a,&b);
    cout<<"a="<<a<<" "<<"b="<<b<<endl;
}
//输出结果为a=4,b=3
  • 引用作为返回值:

注意一下两点:
1.返回对象的作用域不受函数的影响
2.返回的生成作用域为该函数,则不能用引用返回

//*this为当前对象,它的作用域并不受函数的影响
Test& operator=(const Test &t)//赋值语句
    {
        if(this!=&t)
            data=t.data;
        return *this;
    }

注意:不能定义空引用,例:int &p;

  • 对指针的引用:
int a;
int *p=&a;
int *&pt=p;
  • 对数组的引用:
int ar[]={1,2,3,4,5};
int (&br)[]=ar;//注意&br必须带括号
  • 变量引用常量:
const int a;
int  &b=a;//错误,不能变量引用常量。如果可以引用,那就意味着可以通过修改b的值来修改a的值,这与a是常量矛盾
  • 变量引用常量
int a;
const int &b=a;//正确
  • 常量引用常量
const int a;
const int &b=a;
  • 不同类型之间的引用
int a;
const double &b=a;

类型不一样,就会产生临时变量,b真实引用的是临时变量,临时变量均为常量,所以b必须用const修饰

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值