引用做函数参数

一、引用的基本语法


        数据类型 &别名 = 原名;
        例如: int a = 10;
                     int &b = a;
         相当于给变量a起了个别名,它们操作同一个地址内存;所以通过对b进行赋值时,a的值也会改变;例如:
         

int &b = a;
B = 100;
Cout<<"a = "<<a<<endless;


       此时 输出结果a = 100;
二、引用注意事项
        引用必须要初始化,即声明int &b;不合法,需要初始化,即int &b = a;
        并且在初始化后不可以改变;即:
        int &b = a;
        b = c;
        并不改变引用,是对b进行了赋值处理;
三、引用做函数参数
        函数传参时,可以利用引用来让形参修饰实参;可以简化指针修改实参;函数传参的方式如值传递,地址传递,引用传递;
        1、值传递,形参不修饰实参,原地址存储的对应数据没有被改变;
        

void switch(int a, int b)
        {
         int temp = a;
         a = b;
         b = temp;
        }


        2、地址传递,通过地址找到实参,存储的数据被改变;
        

void switch(int &a, int &b)
        {
         int temp = *a;
         *a = *b;
         *b = temp;
        }


       3、引用传递,共用同一个内存空间,存储数据被改变;
        

void switch(int &a,int&b)
        {
         int temp = a;
         a = b;
         b = temp;
}


四、引用做函数返回值
       需要注意首先,不要返回局部变量的引用;第二,函数的调用可以作为左值;
       

int& text()
       {
        int a =10;//局部变量存放在栈区,会被释放
        return a;
        }
int main()
{
int &ref = text();//ref为a的别名
cout<<"ref = "<<ref<<endl;
cout<<"ref = "<<ref<<endl;
}

第一次可以成功输出reg=10,编译器做了保留,第二次输出就为乱码了,a的内存已经释放了。但是当a定义为静态变量时,可以正常输出;

int& tesst()
{
    static int a = 10;//存放在全局区,为静态变量,在程序结束后系统释放
    return a;
}

int main()
{
    int &ref = test();
    cout<<"ref="<<ref<<endl;
    cout<<"ref="<<ref<<endl;

    test() = 1000;
    cout<<"ref="<<ref<<endl;
    cout<<"ref="<<ref<<endl;
}

引用做函数返回值时,函数可以作为左值,如上代码,前两次输出为10,后两次输出为1000;di函数调用完后返回的是变量a的引用,相当于对a进行赋值;

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

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值