指针和引用的区别

关于指针的博客前边写过,可以去看看

点击打开链接


今天只要看看引用的知识:

什么是引用:

"引用"是C++中引入的新的变量类型,它的作用是为一个变量起一个别名。

int a=10;
int &b=a;
b是a的引用,即b是a的别名,a和b的作用相同。对a所进行的操作的结果与对b所进行的操作结果是完全相同的。声明b为引用类型并不需要为b另外开辟空间来存放b,a和b代表同一块空间,具有同样的地址,声明b是a的引用可以理解为:使变量b具有变量a的地址。

引用的特点:

1,一个变量可以有多个引用。

2,引用可以传递:

int a=10;
int &b=a; 
int &c=b;
&c=b 和 &c=a是完全一样的,因为a和b是同一个东西。

3,引用必须初始化,而且只能在初始化的时候引用一次,不能再改为其它变量的引用。一般在初始化变量时,初始值会被拷贝到新建的对象中。然而在定义引用时,程序会把引用和它的初始值绑定在一起,而不是将初始值拷贝给引用。一但初始化完成,引用将和它的初始值绑定在一起,不能再作为其它变量的引用。
4,引用不是创建一个对象,而是给已有的对象起个别名而已。

5,引用不是对象,所以不能定义引用的引用。

6,定义引用时,引用的类型要严格和对象类型符合。

7,const 引用:

可以把引用绑定到const对象上,就像绑定到其他对象上一样,称作对常量的引用,与普通引用不同的是,不能通过对常量的引用来修改它所绑定的对象。

const int a=10;
const int &b=a;
    a=20;       //错误,不能修改常量的值(在C++中被const修饰的是常量) 
    b=20;       //错误,不能通过常引用来修改它所绑定的对象
8,初始化和对const的引用:

第6条提到,引用的类型必须与对象的类型严格的一致,但是有两个特例。第一个特例就是在初始化常量引用时允许用任意表达式作为初始值,只要该表达式的结果能转成引用的类型即可。允许为一个常量引用绑定非常量的对象,字面值,表达式等。

int a=10;
const int &b=a;    //允许const int &绑定到一个普通的int对象上
const int &c=10;   //允许const int &绑定字面值
const int &d=c*10; //允许const int &绑定表达式
int &v1=10;        //错误
int &v2=c*10;      //错误
9,对const的引用可能引用一个并非const的对象。

int i=10;
   int &r1=i;         //正确,让r1绑定i
   const int &r2=i;   //正确,让常引用r2绑定i,但是不允许通过r2改变i
   r1=20;             //正确
   r2=20;             //错误,r2是一个常引用不能通过r2改变i

10,引用作为函数参数:

我们知道在C中参数传递有两种方式"值传递"和"址传递",但本质上都是值传递,要在函数外改变变量的值,就必须要进行址传递。而c++中又引入了引用型变量作为函数形参。

11,当不希望函数内改变函数外的值时,尽量采用常引用传参。

12,传引用作为返回值。


指针和引用的区别和联系:

1、引用只能在定义时初始化一次 ,之后再不能与其他变量绑定。指针变量的值可变。
2、引用必须指向有效的变量,指针可以为空。
3、sizeof在求取指针对象和引用对象的值不同,sizeof引用得到的是所引用对象的大小,sizeof指针得到的是对象的地址大小。
4、引用时(++)和(--)相当于给变量自增自减,给指针进行自增自减则会改变指针的指向。
5、相对而言引用比指针更加安全。



  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值