C++中的引用

引用

    • 引用的基本使用

作用:给变量起别名

语法:数据类型 &别名=原名

示例

int main()
{
    int a = 10;
    int& b = a;
    cout << "a= " << a << endl;
    cout << "b= " << b << endl;
    b = 100;
    cout << "a= " << a << endl;
    cout << "b= " << b << endl;
    return 0;
}

2.引用的注意事项

  • 引用必须初始化

  • 应用在初始化之后,不可以改变

示例

int main()
{
    int a = 10;
    int b = 20;
    //int &c;    //错误,引用必须初始化
    int& c = a;   //一旦初始化后,就不可以更改
    c = b;  //这是赋值操作,不是更改应用
    cout << "a= " << a << endl;
    cout << "b= " << b << endl;
    cout << "c= " << a << endl;
    
    return 0;
}

int a=10;

int &b=a;

(1)引用必须要初始化

int &b; //错误

(2)引用一旦初始化后,就不可以更改了

int &b=c; //错误

3.引用做函数参数

作用:函数传参时,可以用引用的技术让形参修饰实参

优点:可以简化指针修改实参

先介绍一下函数传参的方式

(1)值传递

void swap01(int a, int b)
{
    int temp = a;
    a = b;
    b = temp;
}
int main()
{
    int a = 10;
    int b = 20;
    swap01(a, b);
    cout << "a= " << a << endl;
    cout << "b= " << b << endl;
    return 0;
}

使用值传递时,形参的改变不会影响到实参的改变,因此经过swap函数后,a和

b的值仍然不变

2)地址传递

void swap02(int* a, int* b)
{
    int temp = *a;
    *a = *b;
    *b = temp;
}
int main()
{
    int a = 10;
    int b = 20;
    swap02(&a, &b);
    cout << "a= " << a << endl;
    cout << "b= " << b << endl;
    return 0;
}

地址传递参数时,形参会通过实参的地址来修饰实参,因此在上面的代码中,a和b的值会发生改变

(3)引用传递

void swap03(int& a, int& b)
{
    int temp = a;
    a = b;
    b = temp;
}
int main()
{
    int a = 10;
    int b = 20;
    swap03(a, b);
    cout << "a= " << a << endl;
    cout << "b= " << b << endl;
    return 0;
}

引用传递,形参会修饰实参

总结:通过引用参数产生的效果同地址传参是一样的。引用的语法更清楚简单

4.引用做函数返回值

注意:不要返回局部变量的引用

错误示例

int& test01()
{
    int a = 10;   //局部变量存放在四区中的栈区
    return a;
}
int main()
{
    int& re = test01();
    cout << "re= " << re << endl;
    cout << "re= " << re << endl;
    return 0;
}

返回局部变量的引用时,得到的结果可能是错误的

引用可以返回全局区的变量

如:

int& test02()
{
    static int a = 10;   //静态变量,存放在全局区,全局区上的数据在程序结束后系统释放
    return a;
}
int main()
{
    int& re = test02();
    cout << "re= " << re << endl;
    cout << "re= " << re << endl;
    cout << "re= " << re << endl;
    return 0;
}

函数的调用可以作为左值

int& test02()
{
    static int a = 10;   //静态变量,存放在全局区,全局区上的数据在程序结束后系统释放
    return a;
}
int main()
{
    int& re = test02();
    cout << "re= " << re << endl;
    cout << "re= " << re << endl;
    test02() = 1000;     //如果函数的返回值是引用,这个函数调用可以作为左值
    cout << "re= " << re << endl;
    cout << "re= " << re << endl;
    return 0;
}

如果函数的返回值是引用,这个函数调用可以作为左值

5.引用的本质

本质:引用的本质在c++内部实现是一个指针常量

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

夏微凉.

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

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

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

打赏作者

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

抵扣说明:

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

余额充值