网站导航免费论文 原创论文 论文搜索 原创论文 网学软件 学术大家 资料中心 会员中心 问题解答 原创论文 论文素材 设计下载 最新论文 下载排行 论文上传 在线投稿 联系我们
返回网学首页
网学联系
最新论文 推荐专题 热门论文 素材专题
当前位置: 网学 > 编程文档 > C/C++ > 正文
引用与指针的区别
来源:Http://myeducs.cn 联系QQ:点击这里给我发消息 作者: 用户投稿 来源: 网络 发布时间: 12/10/15
下载{$ArticleTitle}原创论文样式

 
    在c++函数中,形式参数用 引用 和用 指针都可以起到在被调用函数中改变调用函数的变量的作用。什么时候用引用作参数?什么时候用指针作参数呢 void function (int *ptr); void function(int &ref);
    没有 特定的规定。。 学的 久了,就 会习惯什么时候用指针什么时候用引用了!
 引用与指针有什么区别?
 1) 引用必须被初始化,指针不必。
 2) 引用初始化以后不能被改变,指针可以改变所指的对象。
 3) 不存在指向空值的引用,但是存在指向空值的指针。
    C++中尽量用引用。 个人觉得所有的引用都可以用指针,但指针比引用容易出错。
    引用当然更直观更直接,做参数时,如果在函数内不刻意要用指针的那些副作用(如越界访问,动态定向什么的),引用可以代替指针。
    C++ 中一般都用引用就可以了 C 中没有引用,就使用指针 .
    举例如下:
 1 使用指针传递参数时:
 void function (int *ptr) { 函数体;}
 调用该函数时
 main()
 { int p; function (&p); }
 2 使用引用传递参数时:
 void function(int &ref) { 函数体;}
 调用该函数时
 main()
 { int p; function (p); }
 由此可见,使用引用比使用指针传递参数函数调用时更简单,引用和指针功能大体相同,但是有空间分配时建议最好使用指针,因为在释放空间时,
 对指针只需要delete就行了,而引用是不能删除空间的,引用必须指向一个存在的对象。
 
    指针和引用的差别
 1. 非空的差别任何情况下都不能使用指向空值的引用.一个引用必须总是指向某个对象. 不存在的指向空值的引用这个事实意味着使用引用的代码效率比使用指针要高.
 2. 合法性区别在使用引用之前不需要测试他的合法性.指针必须测试.
 3. 可修改区别 指针可以被重新赋值给另一个不同的对象.但是引用总是指向在初始化的时候被制定的对象,以后不能改变.但是指定的对象其内容可以改变.
 应该使用指针的情况: 可能存在不指向任何对象的可能性 需要在不同的时刻指向不同的对象(此时,你能够改变指针的指向)
 应该使用引用的情况: 如果总是指向一个对象并且一旦指向一个对象后就不会改变指向,使用此时应使用引用。
   
 要首先好好理解指针和引用的区别
    指针与引用看上去完全不同(指针用操作符’*’和’->’,引用使用操作符’.’),但是它们似乎有相同的功能。
 指针与引用都是让你间接引用其他对象。你如何决定在什么时候使用指针,在什么时候使用引用呢?
  首先,要认识到在任何情况下都不能用指向空值的引用。一个引用必须总是指向某些对象。因此如果你使用一个变量并让它指向一个对象,
 但是该变量在某些时候也可能不指向任何对象,这时你应该把变量声明为指针,因为这样你可以赋空值给该变量。相反,如果变量肯定指向一个对象,
 例如你的设计不允许变量为空,这时你就可以把变量声明为引用。

  “但是,请等一下”,你怀疑地问,“这样的代码会产生什么样的后果?”

  char *pc = 0; // 设置指针为空值

  char& rc = *pc; // 让引用指向空值

  这是非常有害的,毫无疑问。结果将是不确定的(编译器能产生一些输出,导致任何事情都有可能发生),应该躲开写出这样代码的人除非他们同意改正错误。
 如果你担心这样的代码会出现在你的软件里,那么你最好完全避免使用引用,要不然就去让更优秀的程序员去做。我们以后将忽略一

  • 上一篇资讯: 用c读取XML文件
  • 下一篇资讯: 全局变量和局部变量
  • 网学推荐

    免费论文

    原创论文

    浏览:
    设为首页 | 加入收藏 | 论文首页 | 论文专题 | 设计下载 | 网学软件 | 论文模板 | 论文资源 | 程序设计 | 关于网学 | 站内搜索 | 网学留言 | 友情链接 | 资料中心
    版权所有 QQ:3710167 邮箱:3710167@qq.com 网学网 [Myeducs.cn] 您电脑的分辨率是 像素
    Copyright 2008-2015 myeducs.Cn www.myeducs.Cn All Rights Reserved
    湘ICP备09003080号