首页 > 编程语言 > 详细

C++中的引用

时间:2020-04-15 23:26:50      阅读:72      评论:0      收藏:0      [点我收藏+]

1.  引用的基本使用

  • 作用:给变量起别名

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

  • 注意:

    • 别名数据类型与原名数据类型一致。

    • 引用必须初始化

    • 引用一旦初始化后,就不可以更改(只能作为一个变量的别名)

int a =10;
int &b=a;  //int &b;代码是错误的必须初始化
//引用在初始化后,不可以改变
int c= 20;
b=c;   //赋值操作,而不是更改引用。

 

2.  引用做函数参数

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

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

#include <iostream>
using namespace std;
//交换函数
//1.  值传递:形参不会修饰实参
void swap1 (int a,int b)
{
    int temp = a;
    a=b;
    b=temp;
    cout << "swap1 a =" << a <<endl;
    cout << "swap1 b =" << b <<endl;
}


//2.  地址传递:形参会修饰实参
void swap2(int *a,int *b)
{
    int temp = *a;
    *a=*b;
    *b=temp;
}


//3.  引用传递:形参也修饰实参
void swap3(int &a,int &b)  //&a相当于下面a的别名
{
    int temp = a;
    a=b;
    b=temp;
    cout << "swap1 a =" << a <<endl;
    cout << "swap1 b =" << b <<endl;
}

int main()
{
    int a=10;
    int b=20;
    
    swap1(a,b);   //值传递调用
    cout << " a =" << a <<endl;
    cout << " b =" << b <<endl;
    
    swap2(&a,&b); //地址传递
    cout << " a =" << a <<endl;
    cout << " b =" << b <<endl;

    swap3(a,b);    //引用传递
    cout << " a =" << a <<endl;
    cout << " b =" << b <<endl;
    system("pause");
    return 0;
}

 通过引用参数产生的效果同按地址传递是一样的。

 

3.  引用做函数返回值

  • 作用:引用是可以作为函数的返回值存在的

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

  • 用法:如果函数的返回值是引用,函数调用可以作为左值

#include <iostream>
using namespace std;
//1.  不要返回局部变量引用
int& test1()
{
    int a=10;
    return a;
}

//2.  函数调用可以作为左值
int& test2()
{
    static int a=10;  //静态变量,存放在全局区,程序结束后系统自动释放
    return a;
}

int main()
{
    int &ref1 = test1();
    cout <<"ref =" <<ref <<endl;   //第一次结果正确,是因为编译器做了保留
    cout <<"ref =" <<ref <<endl;   //第二次结果错误,是因为a的内存释放

    int &ref2 = test2();
    cout << "ref2 =" <<ref2 <<endl;

    test2()=1000;  //如果函数的返回值是引用,函数调用可以作为左值
    cout << "ref2 =" <<ref2 <<endl;
    system("pause");
    return 0;
}

 

4.  引用的本质

  本质:引用的本质在c++内部实现是一个指针常量(请区别与常量指针)

ps:指针常量:指向不可改变,值可以改变常量指针:指向可以改变,值不可以改变;

 

5.  常量引用

  • 作用:常量引用主要用来修饰形参,防止误操作

  • 在函数形参列表中,可以加 const 修饰形参,防止形参改变实参

int a = 10;
//加上const之后,编译器将代码修改 int temp=10;const int &ref =temp;

const int &ref =10;
 //引用必须引一块合法的内存空间,int &ref=10;是错误的。
//加入const之后变为只读,不可修改

 

C++中的引用

原文:https://www.cnblogs.com/BY1314/p/12708964.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!