C++ 引用和指针

1.引用的概念及用法


引用:将一个已有变量再起一个别名
格式为 类型 &别名=已定义过的变量
特点:<1>一个变量可以取多个别名
           <2>引用必须初始化
           <3>引用只能再初始化的时候被引用一次,不能再更改。

void test1()
{
    int a = 5;
    int &b = a;
    cout << a << endl;    //结果为5
    cout << b << endl;    //结果为5
}

void test2()
{
    int d1 = 4;
    const int& d2 = d1;                        //d2是d1的别名 d2用const修饰 因为d1是可读可写的 const修饰d2后 d2为只读 范围由大变小 所以可以进行引用
    cout << d1 << " "<< d2 << endl;            //输出d1 d2 结果为4 4
    d1 = 5;                                    
    cout << d1 << " " << d2 << endl;        //更改d1后输出d1 d2 结果为5 5
}

 

2.引用做参数


类似于交换函数
swap(int a ,int b) 
在C语言阶段我们常常会将swap函数传值时将变量地址传过去,原因在这就不多解释了
C++还可以通过引用的方式将两个数交换

 

void swap1(int& a, int& b)
{
    int tmp = a;
    a = b;
    b = tmp;
}

在值传递的过程中 函数会在传值形成形参时进行一次拷贝构造 然后在函数结束时将返回值再拷贝构造成一个中间变量 栈帧销毁 函数中变量全部销毁
值传递进行了两次拷贝构造 1次析构(栈帧销毁的过程)
而引用传递则是再形成形参时进行一次构造 一次析构完成
所以对比以上结果 发现值传递效率很低 而引用转递则会更高效

 

3.引用做返回值


例:
 

int& Add(int d1, int d2)
{
    int ret = d1 + d2;
    return ret;
}


4.汇编层看引用的特性


<1>不要返回一个临时变量的引用
<2>如果返回对象出了当前函数的作用域依旧存在、则最好使用引用返回,因为更高效

 

5.引用和指针的区别


<1>引用只能在定义时初始化一次,之后不能改变指向其他变量,指针变量的值可以改变

<2>引用必须指向有效的变量,指针可以为空

<3>sizeof指针对象和引用对象的意义不一样,sizeof引用得到的是所指向的变量的大小,而sizeof指针是对象地址的大小

<4>指针和引用自增(++)自减(--)意义不一样

<5>相对而言,引用比指针更安全

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值