指针和应用的区别

(1)非空区别。在任何情况下都不能使用指向空值的引用。一个引用必须总是指向某些对象。因此如果你使用一个变量并让他指向一个对象,但是该变量在某些时候也可能不指向任何对象,这是你应该把变量声明为指针,因为这样你可以赋予空值给该变量。相反,如果变量肯定指向一个对象,例如你的设计不允许变量为空,这时你就可以把变量声明为引用。不存在指向空值得引用这个事实意味着使用引用的代码效率比使用指针要高。

(2)合法性区别。在使用引用之前不需要测试它的合法性。相反,指针则应该总是被测试,防止其为空。

(3)可修改区别。指针与引用的另一个重要的不同是指针可以被重新赋值以指向另一个不同的对象。但是引用则是总是指向在初始化时被指定的对象,以后不能改变,但是指定的对象其内容可以改变。

(4)应用区别。总的来说,在以下情况下你应该使用指针:一是你考虑到存在不指向任何对象对象的可能(在这种情况下,你能够设置指针为空),二是你需要能够在不同的时刻指向不同的对象(在这种情况下,你能改变指针的指向)。如果总是指向一个对象并且一旦指向一个对象后就不会改变指向,那么你应该使用引用。

文章出处:http://www.diybl.com/course/3_program/c++/cppxl/20081125/152591.html

参考以下代码理解上面区别:

  1. #include<iostream>
  2. usingnamespacestd;
  3. intmain(intargc,char*argv[])
  4. {
  5. intival=1024;
  6. int*pi=&ival;//apointer
  7. int&rval=ival;//areference
  8. intjval=4096;
  9. intxval=8192;
  10. cout<<"ival="<<ival<<"/t";
  11. cout<<"&ival="<<&ival<<"/t";
  12. cout<<endl;
  13. cout<<"pi="<<pi<<"/t";
  14. cout<<"&pi="<<&pi<<"/t";
  15. cout<<"*pi="<<*pi<<"/t";
  16. cout<<endl;
  17. cout<<"rval="<<rval<<"/t";
  18. cout<<"&rval="<<&rval<<"/t";
  19. cout<<endl;
  20. cout<<"jval="<<jval<<"/t";
  21. cout<<"&jval="<<&jval<<"/t";
  22. cout<<endl;
  23. //changethevaluesofthereferenceandthepointer
  24. pi=&jval;
  25. rval=jval;
  26. //printthechanges
  27. cout<<endl;
  28. cout<<"ival="<<ival<<"/t";
  29. cout<<"&ival="<<&ival<<"/t";
  30. cout<<endl;
  31. cout<<"pi="<<pi<<"/t";
  32. cout<<"&pi="<<&pi<<"/t";
  33. cout<<"*pi="<<*pi<<"/t";
  34. cout<<endl;
  35. cout<<"rval="<<rval<<"/t";
  36. cout<<"&rval="<<&rval<<"/t";
  37. cout<<endl;
  38. cout<<"jval="<<jval<<"/t";
  39. cout<<"&jval="<<&jval<<"/t";
  40. cout<<endl;
  41. cout<<endl;
  42. *pi=xval;
  43. cout<<"pi="<<pi<<"/t";
  44. cout<<"&pi="<<&pi<<"/t";
  45. cout<<"*pi="<<*pi<<"/t";
  46. cout<<endl;
  47. cout<<"jval="<<jval<<"/t";
  48. cout<<"&jval="<<&jval<<"/t";
  49. cout<<endl;
  50. return0;
  51. }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值