c++笔记(三)之核心编程(二)引用

本文详细介绍了C++中的引用,包括其基本使用、注意事项、作为函数参数的优势、作为函数返回值的特性,以及常量引用的作用。通过实例展示了引用如何简化代码并确保函数调用时实参的直接修改。同时,强调了引用的本质是常量指针,以及常量引用防止形参误操作的重要性。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

二.引用

1.基本使用

  • 作用:给变量起别名
  • 语法:数据类型 &别名 = 原名
    include<iostream>
    using namepase std;
    
    int main()
    {
     int a=10;
     int &b=a;//创建引用:数据类型 &别名 = 原名
     cout<<"a="<<a<<endl;
     cout<<"b="<<b<<endl;
    
     b=100;
     cout<<"a="<<a<<endl;
     cout<<"b="<<b<<endl;
     system("pause");
     return 0;
    }
    

2 .引用的注意事项

  • 引用必须初始化

int &b;//是错误的

int &b=a;//这才是正确的

  • 引用在初始化之后,不可以改变

int a=10;

int &b=a;

int c=20;

b=a;//这里不再是引用了,而是赋值

3.引用做函数参数

  • 作用:函数传参时,可以利用引用的技术让形参修饰实参
  • 优点:可以简化指针修饰实参
  • include<iostream>
    using namepase std;
    
    void change01(int a,int b)//值传递,形参不会修饰实参,就是ab交换后不会传递到主函数去
    {
      int t;
      t=a;
      a=b;
      b=t;
    }
    
    void change02(int * a,int * b)//地址传递,形参会修饰实参,就是最后ab可以传递到主函数去
    {
      int t;
      *t=*a;
      *a=*b;
      *b=t;
    }
    
    void change03(int &a,int &b)//引用传递,形参也是可以修饰实际参数的
    {
      int t;
      t=a;
      a=b;
      b=t;
    }
    int main()
    {
     int a=10,b=20;
     change01(a,b);
     cout<<"change01_a"<<a<<endl;
     cout<<"change01_b"<<b<<endl;
     change02(&a,&b);
     cout<<"change02_a"<<a<<endl;
     cout<<"change02_b"<<b<<endl;
     change02(a,b);
     cout<<"change03_a"<<a<<endl;
     cout<<"change03_b"<<b<<endl; 
     system("pause");
     return 0;
    }
    

4.引用函数的返回值 

  • 作用:引用是可以作为函数返回值存在的
  • 注意:函数不要返回局部变量引用
  • 用法:函数调用作为左值
  • include<iostream>
    using namepase std;
    int& test01()
    {
     int a=10;//局部变量,存储在栈区,函数执行完,编译器释放数据
     return a;
    } 
    
    int& test02()
    {
      static int a=10;//静态变量,储存在堆区,整个程序执行完才会释放
      return a;
    }
    int main()
    {
     int r=test01();
     cout<<"test01_r"<<r<<endl;//第一次正常输出,编译器有保留
     cout<<"test01_r"<<r<<endl;//第二次不能正常输出,因为数据已经被释放了
    
     int r=test02();
     cout<<"test02_r"<<r<<endl;//
     cout<<"test02_r"<<r<<endl;//一直可以正确输出,因为没有被释放
     test02()=1000;//函数可以作为左值
     cout<<"test02_r"<<r<<endl;//输出结果是1000
     cout<<"test02_r"<<r<<endl;//相当于说test02是a,改变的就是a就是r
    
     system("pause");
     return 0;
    }
    

5.引用的本质

引用的本质就是一个指针常量

但它发现是引用后回自动给它变为 const * a这样的

而指针常量是不可以更改的,所以我们只能去改变它的值,而不可以去让它引用别的地址 

6.常量引用

  • 作用:常量引用主要是用来修饰形参,防止误操作
  • 在函数形参列表中,可以加const修饰形参,防止形参改变实参
  • include<iostream>
    using namepase std;
    
    
    
    int main()
    {
     //int &r=10;//这是错误的,引用必须引一块合法的内存空间,而10是常量
     const int &r=10;
    //加上const后,编译器将代码修改为 int t=10;const int &r=t;
     r=20;//会报错,因为加了const后,变为只读,不可以修改
    
     system("pause");
     return 0;
    }
    

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值