C++引用详解

C++中的引用是为对象起了另一个名字,类型& 引用的变量名=被引用的变量名

引用的特点:

引用必须初始化;

一个变量可以有多个引用;

引用的应用:

基础应用

void test_base_1()
{
    int x = 10;
    x--;
    cout << x << endl;    //x=9
    //int& m;    //没有初始化
    int& y = x;
    y--;        
    cout << x << endl;    //输出8,即对引用操作就是对变量操作
    int& z = x;            //可以有多个引用
    z--;
    cout << x << endl;
}

常引用

常引用可以绑定到非常量引用,非常量引用不可以绑定到常量引用。

简而言之,就是限制小的兼容性好,

}
void test8()
{
    //=========================================
    const int a = 3;
    const int& b = a;    //正确,引用及其对应的对象都是常量
    b = 5;    //错误,b是对常量的引用
    int& c = a;    //错误,试图让一个非常量引用指向一个常量引用
    //=========================================
    int i = 20;
    const int& m = i;    //允许将const int&绑定到一个普通int对象上
    const int& n = 23;    //正确,n是一个常量引用
    int& p = m;            //错误,p是一个普通的非常量引用
}

引用作为参数

例如在做两个数交换得过程中,直接传参不能真正地交换两个数,所以我们在学C语言时提到了传指针来解决,但是显然这种方式相对来说太过于繁琐,引用的方式简单很多。

//swap
test_swap(a,b);
void test_swap(int a, int b)
{
    int t = a;
    a = b;
    b = t;
}
//引用作为参数
test3_swap(a,b);
void test3_swap(int& a, int& b)
{
    int t = a;
    a = b;
    b = t;
}
//指针实现
test3_swap_1(&a,&b);
void test3_swap_1(int* a, int* b)
{
    int t = *a;
    *a = *b;
    *b = t;
}

引用的本质知识给变量起了个名字,对引用取地址取到的还是变量的地址。

void test4()
{
    int a = 1;
    int& b = a;
    cout << "变量的地址:" << &a << endl;
    cout << "引用的地址:" << &b << endl;
}

运行结果:

引用作为返回值

//引用作为函数的返回值时,必须在定义函数时在函数名前将&
//用引用作函数的返回值,的最大的好处是在内存中不产生返回值的副本
int& test5(int temp)
{
    int t = temp * temp;
    return t;
}

引用不是一种数据类型,不能建立指向引用类型的指针

建立指针变量的引用

不能建立引用的数组

引用的注意事项:

  1. &不是取地址,而是标识这是一个引用

  1. 声明引用时必须同时初始化

  1. 引用一旦初始化指向一个对象,就不能指向另一个对象了

  1. 引用不是一种数据类型,不能建立指向引用类型的指针

  1. 可以建立指针变量的引用

  1. 不能建立引用的数组

引用与指针的区别

  1. 引用使用比指针便捷,可读性强

  1. 引用不占用内存,指针占内存

  1. 引用只有一级,指针可以有多级

  1. 指针和引用的自增和自减意义不同,指针的++表示下一份数据,引用的++指引用所指的变量+1.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小谢%同学

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值