c++引用

本文详细介绍了C++中的引用概念,包括其性质:必须初始化、引用不可改变,以及引用作为参数和返回值时的作用。通过示例展示了引用如何作为变量的别名,以及在函数调用中如何实现值的直接交换。同时强调了引用与指针的区别,并提醒读者避免返回局部变量引用的错误做法。
摘要由CSDN通过智能技术生成

引用

T & 别名 = 目标变量原名

int  a = 10;
int& b = a;
cout << &a << endl;
cout << &b << endl;
//输出结果:每次执行输出结果不一样因为是地址。
003DFEE8
003DFEE8
  1. 引用变量的类型必须与它的实体类型一致或者实体可转为引用类型。

  2. 引用必须初始化。

  3. 引用只能对引用一个实体,但一个实体可以有多个引用。

    int b = 10;
    int c = 100;
    int& a = b;
    a = c;//这个不是把引用a名称给了c 而是把c的值赋给a 就相当于b=c; 你可以输出a,b,c的地址看一下
    cout << a;

    cout << &b<<endl;
    cout << &a << endl;
    cout << &c << endl;

  1. 引用不是指针因为引用不是指向目标变量,而是给目标变量起新名字。

  2. 对引用的使用方法与原实体的使用方法一致

    单独对5的解释
    //对实体a的引用
    int a =  10;
    int& b = a;
    cout << &a << endl;
    cout << &b << endl;//引用与原实体使用方法一致
    //对实体指针p的引用
    int* p = &a;
    int* bp = &p;
    cout << *p<< endl;
    cout << *bp << endl;//引用与原实体使用方法一致

    笼统地讲,引用就是在原本变量的地址上重新加入一个新名称。

一、普通引用

①常量引用-变量:指引用名定义为常量,实体是变量

int a = 10;
 const int &b = a;//常量引用只能读不能写,但是原变量a可以写也可以写成const int &b=a;
//上面是 int 转为  const int& 

②常量引用-常量:

const int  a = 100;  
 const int & b = a;  //类型一致       //也可以写成const int &b=a;

③变量引用-变量:省略

int a = 10;   //可读可写
int& b = a;  //可读可写

④变量引用-常量:不存在

int const  a = 10;  
int  & b = a;//错误,int const 无法转换为int

函数引用的前提知识

main 函数内的变量是全局变量,还是局部变量?

(1)main 函数内的变量不是全局变量,而是局部变量

(2)只不过它的生命周期和全局变量一样长而已

(3)全局变量一定是定义在函数外部的

二、函数与引用

(1)引用作为参数

我们想为什么会出现值传递、引用传递和指针所代表的地址传递呢?

void swap(int& left,int& right)
{
    int tmp = left;
    left = right;
    right = tmp;
}
void main(){
   int a = 10;
   int b = 20;
    swap(a,b);
    cout<<a<<endl;
    cout<<b<<endl;//结果会交换,值传递和地址传递就不再赘述了
}

我们可以用地址理解:

值传递:对新创建的地址空间上的内容进行操作。

用引用方法接收:是直接在实参的地址上对内容进行操作(只不过是换了个名儿)。

用指针方法接收:是重新创建了一个地址空间存放指针,但是指针指向了实参的地址,通过解指针可以对实参地址上的内容进行操作。

(2)引用作为函数返回值

不要返回局部变量的引用--严重的错误

因为局部变量(除了main函数的局部变量)在,函数结束地址就被回收,别名就没有依托了。

返回全局变量的引用

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值