cpp自学 day11 (引用)

引用

基本语法

作用:给变量起别名

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

注意事项

1.引用必须初始化

2.引用初始化后,不可改变 (形如 int &b = a;)

int a = 10 ;
int &b = a ;
int c = 20 ;
b = c ;
输出结果: a=20,b=20,c=20

引用做函数参数

作用:函数传参时,可利用引用让形参修饰实参(个人理解就是,形参改变实参跟着改变)

 可简化指针修改实参

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

int main () 
{
  int a = 10 ;
  int b = 20 ;
}
//上面的&a是实参a的别名,修改&a相当于修改地址值

引用做函数的返回值

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

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

int& test ()
{
  int a = 10 ;
  return a ;
}

int main ()
{
  int &ref = test() ;
  cout << "ref=" << ref << ednl; //第一次输出ref=10,是因为编译器保留数据
  cout << "ref=" << ref << ednl; //第二次结果错误,内存已经释放
}

       局部变量存放在栈区,操作过后即释放。

用法:函数调为左值

int& test01()
{
  static int a = 10 ;
  return a ;

}

int main()
{
  int &ref = test01();
  test01() = 10000;

}

引用的本质

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

引用的本质是操作指针,只是所有的指针操作编译器已经搞定了

常量引用

作用:用于修饰形参,防止误操作  形参(函数定义时那个()里面的)

常量引用用于确保函数内部无法通过该引用修改传入的参数,从而避免代码层面的误操作。但这不意味着原变量在函数外不能被其他方式修改(若原变量本身是非常量)

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

C++ 引用详解

一、基本概念

  • 作用:给变量起别名

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

int a = 10;
int &b = a;  // b是a的别名

二、注意事项

  1. 必须初始化

    int &b;      // 错误
    int &b = a;  // 正确
  2. 初始化后不可改变指向

    int a = 10, c = 20;
    int &b = a;
    b = c;        // 等同于 a = c(赋值操作,不是改变引用指向)
    cout << a;    // 输出20

三、引用做函数参数

  • 作用:实现形参修饰实参(类似指针效果)

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

int main() {
    int x=10, y=20;
    swap(x, y);  // x=20, y=10
}

四、引用做函数返回值

1. 禁止返回局部变量引用

int& test() {
    int a = 10;  // 栈区变量
    return a;     // 危险操作!
}

int main() {
    int &ref = test();
    cout << ref;  // 第一次可能输出10(残留数据)
    cout << ref;  // 内存释放后输出异常
}

2. 正确用法(返回静态变量/全局变量)

int& test() {
    static int a = 10;  // 静态区变量
    return a;
}

int main() {
    int &ref = test();
    test() = 1000;  // 函数调用作为左值
    cout << ref;    // 输出1000
}

五、引用的本质

  • 底层实现:指针常量(Type* const

  • 编译器行为

    int &b = a;  
    // 自动转换为:int* const b = &a;
    
    b = 100;     
    // 自动转换为:*b = 100;

六、引用 vs 指针

特性引用指针
空值不允许允许NULL
指向修改不可修改可以修改
内存占用无额外空间占用存储空间
访问方式自动解引用显式解引用

建议:函数参数传递和返回值优先使用引用,需要"无物"表示时使用指针(如NULL场景)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值