简单理解C++引用

标签(空格分隔): C系列


引用是变量的别名


先来两段珍藏已久的代码:

第一段

#include<iostream>
using namespace std;
void swap(int &a,int &b)
{
    int temp=a;
    a=b;
    b=temp;
}
int main()
{
    int a,b;
    cin>>a>>b;
    if(a<b)
    swap(a,b);
    cout<<a<<' '<<b<<endl;
    return 0;
}

第二段

#include<iostream>
using namespace std;
void swap(int *&a,int *&b)
{
    int *temp;
    temp=a;
    a=b;
    b=temp;
}
int main()
{
    int a,b;
    cin>>a>>b;
    int *p=&a,*q=&b;
    if(a<b)
    swap(p,q);
    cout<<*p<<' '<<*q<<endl;
    return 0;
}

这两段是刚开始接触C++时自己摸索着写的,但当时理解引用不知道什么是引用,一个人还是费了很大的力气,现在回过来看,简直是,。,。通过第二段代码可以看出,指针和引用就是一个意思—地址。

常规使用

int a=29;
int &b=a;//(1)这句就是把a变量的地址给了b,b现在变成了a的遥控器,b指向的地址就是a的地址,&的意思就是说b就是一个引用。
int * b=& a;//(2)这句话是说b为一个指针,b同样是指向a地址的变量,只不过是指针变量。
b=20;//(1)这里的行为就是修改b指向的地址的变量的值。
*b=20;//(2)修改b指向的地址的变量的值。
cout<<a<<endl;//(1)输出为20
cout<<a<<endl;//(2)输出为20

昨天课堂上老师给出一个“奇奇怪怪的程序”

#include<iostream>
using namespace std;
int a=4;
int &fun(int x) {
    a=a+x;
    return a;
}
int main() {
    int t=5;
    cout<<fun(t)<<endl;
    fun(t)=20;//先调用再赋值,a=20
    cout<<fun(t)<<endl;//输出25,a=25;
    t=fun(t);//先调用,再赋值, t=30
    cout<<fun(t)<<endl; //输出60(a=60)
    return 0;
}

输出结果:

9
25
60

反正我之前是没有见过可以有调用函数的形式做左值的,看来还是要去上课才是真理.
回到宿舍来分析分析。

int &fun(int x) {
    a=a+x;
    return a;
}

先把这一团看作一个整体。就看做fun(t)做左值时就看做是一个引用变量,引用的是a的地址,不做左值时就是调用函数的语句。这样解释,,。,等于没有解释

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值