首页 > 编程语言 > 详细

C++引用

时间:2021-08-03 22:26:55      阅读:28      评论:0      收藏:0      [点我收藏+]

引用的基本使用

作用:给变量起别名

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

#include <iostream>
using namespace std;

int main()
{
    int a = 10;
    int &b = a;

    cout << a; //输出10
    cout << b; //输出10

    b = 100;

    cout << a; //输出100
}

引用的注意事项

  • 引用必须初始化
  • 引用在初始化后,不可以改变(类比指针常量)

引用作函数参数

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

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

#include <iostream>
using namespace std;

//交换函数

//1、值传递
void mySwap01 (int a, int b)
{
    int temp = a;
    a = b;
    b = temp;
    cout << a << " " << b; //输出20 10 形参发生交换 
}

//2、地址传递
void mySwap02 (int * a, int * b) //a 和 b 接收的是实参的地址 
{
    int temp = *a;
    *a = *b;
    *b = temp;
    cout << *a << " " << *b; //输出20 10 形参发生交换 
} 

//3、引用传递
int mySwap03 (int &a, int &b)
{
     int temp = a;
    a = b;
    b = temp;
    cout << a << " " << b; //输出20 10 形参发生交换 
}

int main()
{
    int a = 10;
    int b = 20;
    
    /* 1、值传递
     *    mySwap01 (a, b); //形参不会修饰实参 
     *    cout << a << " " << b; //输出10  20 
     */
     
    /* 2、地址传递
     *    mySwap02 (&a, &b); //形参修饰实参 
     *    cout << a << " " << b; //输出20 10 实参发生交换 
     */
     
    // 3、引用传递 
    mySwap03(a, b);  //形参修饰实参 
    cout << a << " " << b;  //输出20 10 实参发生交换 
}

引用作函数的返回值

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

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

用法:函数调用为左值

#include <iostream>
using namespace std;

//1、不要返回局部变量的引用
int & test01()
{
    int a = 10; //局部变量存放在栈区
    return a; 
} 

//2、函数的调用可以作为左值
int & test02()
{
    static int a = 10; //静态变量,存放在全局区,全局区上的数据在程序结束后释放 
    return a;
} 

int main()
{
    int &ref = test01();
    cout << ref << endl; //输出10,编译器做了保留 
    cout << ref << endl; //输出乱码 
    
    int &ref2 = test02(); 
    cout << ref2 << endl; //输出10
    cout << ref2 << endl; //输出10 
    
    test02() = 1000; //如果函数的返回值是引用,函数的调用可以作为左值
    cout << ref2 << endl; //输出1000
    cout << ref2 << endl; //输出1000
}

引用的本质

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

int a = 10;
int &ref = a; //自动转化为 int * const ref = &a; 指针的指向不可修改

常量引用

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

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

//场景1
//加上const之后 编译器将代码修改
// int temp = 10;    const int &ref = temp;
const int &ref = 10; //可执行,且之后ref不可修改

//场景2
//打印数据函数
void showValue (const int & val)
{
    // val = 1000;  //报错 不可修改
    cout << val << endl; 
}

int main()
{
    int a = 100;
    showValue(a); //打印100
}

 

C++引用

原文:https://www.cnblogs.com/baicang/p/15096277.html

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