【C++】 引用学习

1.什么是引用

    引用是为对象起的另外一个名字,定义的格式为: 类型 &引用变量名 = 已定义过的变量名。例如:
int a=10;
int &b=a;   //b是a的引用

2.引用的特点

 1>一个变量可取多个别名
 2> 引用必须初始化 
 3>引用只能在初始化的时候引用一次,不能改变为再引用其他的变量。
    定义引用时,程序会把引用的它的初始值绑定在一起,一旦初始化,引用将和它的初始值对象一直绑定在一起,所以无法再引用其他变量,且必须初始化。

3.几种特殊的引用

1>引用一个引用变量
    实际上相当于给别名再次起了一个别名
2>const引用
    被const修饰的引用相当于一个常量
void Test ()
 { 
    int d1 = 4;    
    const int & d2 = d1;    
    d1 = 5;          // d1改变 d2的值也会改变。    
    //d2 = 6;        // 错误。不能给常量(不能被修改的量)赋值
}
    有且只有被const修饰的引用可以引用一个常量
void test()
{
      const int & d= 5;  // 常量具有常性,只有常引用可以引用常量
}
  被const 修饰的 int类型的引用可以引用一个double类型的数据,但是会丢失数据。如果不用const修饰,则编译器会报错。
void test()
{
      double d7 = 1.1;     
    //int& d8 = d7; //错误,d7是double类型,d8是int,d7赋值给 d8时要生成一个临时变量,也就是说d8引用的是这个带有常性的临时变量,所以不能赋值。   
      const int& d9 = d7; 
}
3>引用作为参数
    引用作为函数参数可以直接在函数内部改掉传进来的实参的值,非常方便。
    
void Swap (int& left, int& right)
 {    
     int temp = left;     
     right = left ;     
     left = temp ;
 }  //通过引用改掉了传进来的实参值
    如果不希望改掉实参的值,尽量使用常引用传参
4>引用作为返回值
    引用作为返回值时,一定要注意不能返回临时变量的引用。临时变量的引用在返回时,系统会将临时变量的地址放到寄存器中(感兴趣为什么是这样的话可以尝试看一下对应的汇编代码),所以相当于返回了临时变量的地址,如果那块空间没有被占用的话结果是对的,但这只是一种侥幸正确的情况,一旦空间被占用,结果将变成一个随机值。

<span style="font-weight: normal;"><span style="font-size:10px;">#include<iostream>
using namespace std;

int& Add(int d1, int d2)  
{   
	int ret = d1 + d2;
    return ret; 
}
void main() 
{
	int a = 3, b = 4;     
    int c = Add(a, b);    
    cout << "c:" << c << endl;  //结果虽然正确,实际上已经发生了错误。
}</span></span>


总结:

    学习引用,我们会发现,它貌似和指针很相似,那么它和指针有哪些区别呢?
  1>引用只能在定义时初始化一次,之后不能改变指向其它变量(从一而终);指针变量的值可变。 
  2> 引用必须指向有效的变量,指针可以为空。
  3>sizeof指针对象和引用对象的意义不一样。sizeof引用得到的是所指向的变量的大小,而sizeof指针是对象地址的大小。 
  4> 指针和引用自增(++)自减(--)意义不一样。
  5> 相对而言,引用比指针更安全。

指针比引用更灵活,但是也更危险。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值